{
 "info": {
  "name": "Billerang v1 APIs",
  "description": "Full v1 surface, generated from static/openapi/openapi-v1.yaml (343 paths, 565 operations across 79 tags), plus a hand-written Query API folder with live-verified examples (11 requests). Total requests in this collection: 576. Regenerated by the API Collection & Reference agent.",
  "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
 },
 "auth": {
  "type": "bearer",
  "bearer": [
   {
    "key": "token",
    "value": "{{access_token}}",
    "type": "string"
   }
  ]
 },
 "event": [
  {
   "listen": "prerequest",
   "script": {
    "type": "text/javascript",
    "exec": [
     "// Auto-refresh token if expired or missing",
     "const tokenExpiry = pm.collectionVariables.get('token_expiry');",
     "const now = Math.floor(Date.now() / 1000);",
     "",
     "if (!pm.collectionVariables.get('access_token') || !tokenExpiry || now >= parseInt(tokenExpiry)) {",
     "    const tokenUrl = pm.collectionVariables.get('keycloak_url') + '/realms/' + pm.collectionVariables.get('realm') + '/protocol/openid-connect/token';",
     "    pm.sendRequest({",
     "        url: tokenUrl,",
     "        method: 'POST',",
     "        header: { 'Content-Type': 'application/x-www-form-urlencoded' },",
     "        body: {",
     "            mode: 'urlencoded',",
     "            urlencoded: [",
     "                { key: 'grant_type', value: 'client_credentials' },",
     "                { key: 'client_id', value: pm.collectionVariables.get('client_id') },",
     "                { key: 'client_secret', value: pm.collectionVariables.get('client_secret') }",
     "            ]",
     "        }",
     "    }, function (err, res) {",
     "        if (!err && res.code === 200) {",
     "            const json = res.json();",
     "            pm.collectionVariables.set('access_token', json.access_token);",
     "            pm.collectionVariables.set('token_expiry', now + (json.expires_in || 300) - 10);",
     "        }",
     "    });",
     "}"
    ]
   }
  }
 ],
 "variable": [
  {
   "key": "base_url",
   "value": "http://localhost:8080",
   "type": "string"
  },
  {
   "key": "keycloak_url",
   "value": "http://localhost:8081",
   "type": "string"
  },
  {
   "key": "realm",
   "value": "billerang",
   "type": "string"
  },
  {
   "key": "client_id",
   "value": "billerang-backend",
   "type": "string"
  },
  {
   "key": "client_secret",
   "value": "<set-from-.credentials>",
   "type": "string"
  },
  {
   "key": "access_token",
   "value": "",
   "type": "string"
  },
  {
   "key": "token_expiry",
   "value": "",
   "type": "string"
  }
 ],
 "item": [
  {
   "name": "Query API (live-verified examples)",
   "description": "Read-only /api/v1/query/{entity} examples, captured live against a running Billerang stack. See docs/apiReference/query-api.md for the full grammar.",
   "item": [
    {
     "name": "1. ne filter (seller)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/seller?filters=%7B%22ne%20code%22%3A%22SELLER_FR%22%7D&fields=code,description&limit=5"
      },
      "description": "Sellers whose code is not SELLER_FR. Captured live: total 10 (11 minus SELLER_FR)."
     }
    },
    {
     "name": "2. inList filter (seller)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/seller?filters=%7B%22inList%20code%22%3A%5B%22SELLER_FR%22%2C%22SELLER_US%22%2C%22MAIN_SELLER%22%5D%7D&fields=code,description"
      },
      "description": "Sellers whose code is in a given list."
     }
    },
    {
     "name": "3. Get by id with field selection",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/seller/-3?fields=id,code,description"
      },
      "description": "Fetch one seller by numeric id, projecting only 3 fields."
     }
    },
    {
     "name": "4. Nested $operator OR (lowercase, verified)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/seller?filters=%7B%22%24operator%22%3A%22OR%22%2C%22code%22%3A%22SELLER_FR%22%2C%22description%22%3A%22US%20Seller%22%7D&fields=code,description"
      },
      "description": "IMPORTANT: $operator must be lowercase. Uppercase $OPERATOR silently falls back to AND (see query-api.md)."
     }
    },
    {
     "name": "5. groupBy + SUM()/COUNT() aggregation (walletOperation)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/walletOperation?fields=seller.code,SUM(amountWithoutTax),COUNT(id)&groupBy=seller.code&limit=5"
      },
      "description": "Aggregation requires the parenthesized SUM(field)/COUNT(field) form in `fields`, combined with `groupBy`."
     }
    },
    {
     "name": "6. forceCount on a huge entity (walletOperation)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/walletOperation?limit=3&forceCount=true"
      },
      "description": "Forces a real COUNT even for entities configured as huge-volume in FinanceSettings."
     }
    },
    {
     "name": "Bonus: SQL raw filter fragment",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/seller?filters=%7B%22SQL%22%3A%22a.code%20like%20'SELLER%25'%22%7D&fields=code"
      },
      "description": "Raw SQL fragment as a filter value."
     }
    },
    {
     "name": "Bonus: count endpoint",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/walletOperation/count"
      },
      "description": "Count-only endpoint, same filters grammar as the list endpoint."
     }
    },
    {
     "name": "Metadata: list queryable entities",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/entities?onlyHugeEntities=true"
      },
      "description": ""
     }
    },
    {
     "name": "Metadata: field schema for one entity",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/entities/seller"
      },
      "description": ""
     }
    },
    {
     "name": "POST dialect equivalent (same filter as #4's wildcardOr cousin)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/query/seller"
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"filters\": {\n    \"wildcardOr description\": \"Morocco\"\n  },\n  \"genericFields\": [\n    \"code\",\n    \"description\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "POST dialect carries the same JSON body shape as the legacy Generic API (genericFields, not fields). Byte-identical result to the GET dialect."
     }
    }
   ]
  },
  {
   "name": "Business Account Models",
   "item": [
    {
     "name": "List business account models",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccountModels",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccountModels"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "hierarchyType",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of BAMs, filterable by code, description substring, and hierarchy type, ordered by sortBy/sortOrder (code ascending by default). Read-only."
     }
    },
    {
     "name": "Create a business account model",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccountModels",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccountModels"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"code\": \"PX_BILLING_GROUP\",\n  \"description\": \"string\",\n  \"hierarchyType\": \"S_CA_BA_UA\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new BAM. A duplicate code returns 400. Use POST /{code} for upsert semantics."
     }
    },
    {
     "name": "Get one business account model",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccountModels/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccountModels",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single BAM by functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update a business account model (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccountModels/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccountModels",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"code\": \"PX_BILLING_GROUP\",\n  \"description\": \"string\",\n  \"hierarchyType\": \"S_CA_BA_UA\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the BAM if absent, otherwise updates it. Safe to retry. The path code wins over any code in the body."
     }
    },
    {
     "name": "Update a business account model",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccountModels/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccountModels",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"code\": \"PX_BILLING_GROUP\",\n  \"description\": \"string\",\n  \"hierarchyType\": \"S_CA_BA_UA\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing BAM by code. Partial-update semantics: null or absent keeps the current value, empty value for the type clears it. The model must already exist."
     }
    },
    {
     "name": "Delete a business account model",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccountModels/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccountModels",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the BAM identified by code. Fails with 409 if accounts still reference it. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Business Accounts",
   "item": [
    {
     "name": "Create an account hierarchy",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccounts",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccounts"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"CUST_ACME\",\n  \"name\": \"Acme Corp\",\n  \"hierarchyType\": \"S_CA_BA_UA\",\n  \"parentCode\": \"string\",\n  \"customerCategoryCode\": \"MARKETPLACE_ACCOUNTS\",\n  \"isCompany\": true,\n  \"currencyCode\": \"EUR\",\n  \"languageCode\": \"ENG\",\n  \"customerBrand\": \"string\",\n  \"externalRef1\": \"string\",\n  \"externalRef2\": \"string\",\n  \"vatNo\": \"FR12345678901\",\n  \"customFields\": {},\n  \"soldTo\": {\n    \"lastName\": \"string\",\n    \"address1\": \"string\",\n    \"city\": \"string\",\n    \"zipCode\": \"string\",\n    \"country\": \"FR\",\n    \"email\": \"string\",\n    \"phone\": \"string\"\n  },\n  \"billToSameAsSoldTo\": true,\n  \"billTo\": {\n    \"lastName\": \"string\",\n    \"address1\": \"string\",\n    \"city\": \"string\",\n    \"zipCode\": \"string\",\n    \"country\": \"FR\",\n    \"email\": \"string\",\n    \"phone\": \"string\"\n  },\n  \"billing\": {\n    \"billingCycleCode\": \"string\",\n    \"electronicBilling\": true,\n    \"mailingType\": \"string\",\n    \"emailTemplateCode\": \"string\",\n    \"taxCategoryCode\": \"string\",\n    \"ccedEmails\": \"string\",\n    \"invoicingThreshold\": 0,\n    \"invoicePrefix\": \"string\",\n    \"checkThreshold\": \"string\",\n    \"thresholdPerEntity\": true\n  },\n  \"paymentMethodType\": \"DIRECTDEBIT\",\n  \"paymentMethodAlias\": \"string\",\n  \"paymentMethodPreferred\": true,\n  \"bankCoordinates\": {\n    \"iban\": \"FR7630006000011234567890189\",\n    \"bic\": \"AGRIFRPP\",\n    \"accountOwner\": \"string\",\n    \"bankName\": \"string\"\n  },\n  \"paymentTerms\": \"string\",\n  \"creditCategory\": \"string\",\n  \"dueDateDelay_fx\": \"string\",\n  \"invoicingThreshold\": 0,\n  \"registrationNumbers\": [\n    {\n      \"registrationNo\": \"552100554\",\n      \"isoIcdCode\": \"0002\"\n    }\n  ],\n  \"legalEntityTypeCode\": \"string\",\n  \"exemptionReason\": \"string\",\n  \"taxExemptCertificateId\": \"string\",\n  \"taxExemptEffectiveDate\": \"2026-01-01T00:00:00+00:00\",\n  \"taxExemptExpirationDate\": \"2026-12-31T00:00:00+00:00\",\n  \"mandateIdentification\": \"string\",\n  \"mandateDate\": \"2026-01-15T00:00:00+00:00\",\n  \"generalClientAccountCode\": \"string\",\n  \"discountPlanCodes\": [\n    \"string\"\n  ],\n  \"businessAccountModelCode\": \"string\",\n  \"einvoicingEnabled\": true,\n  \"einvoiceEndpointId\": \"string\",\n  \"einvoiceEndpointSchemeId\": \"string\",\n  \"einvoiceCountryProfile\": \"string\",\n  \"einvoiceBusinessCategory\": \"string\",\n  \"eInvoicingEnabled\": false,\n  \"eInvoiceEndpointId\": \"string\",\n  \"eInvoiceEndpointSchemeId\": \"string\",\n  \"eInvoiceCountryProfile\": \"string\",\n  \"eInvoiceBusinessCategory\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new Customer/Customer Account/Billing Account/User Account hierarchy from the payload. The set of tiers created is driven by the business account model and hierarchy type. Referenced setup entities (customer category, billing cycle, seller, ...) must already exist. Returns 200 with a SUCCESS envelope on success."
     }
    },
    {
     "name": "Create or update an account hierarchy (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccounts/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccounts",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"CUST_ACME\",\n  \"name\": \"Acme Corp\",\n  \"hierarchyType\": \"S_CA_BA_UA\",\n  \"parentCode\": \"string\",\n  \"customerCategoryCode\": \"MARKETPLACE_ACCOUNTS\",\n  \"isCompany\": true,\n  \"currencyCode\": \"EUR\",\n  \"languageCode\": \"ENG\",\n  \"customerBrand\": \"string\",\n  \"externalRef1\": \"string\",\n  \"externalRef2\": \"string\",\n  \"vatNo\": \"FR12345678901\",\n  \"customFields\": {},\n  \"soldTo\": {\n    \"lastName\": \"string\",\n    \"address1\": \"string\",\n    \"city\": \"string\",\n    \"zipCode\": \"string\",\n    \"country\": \"FR\",\n    \"email\": \"string\",\n    \"phone\": \"string\"\n  },\n  \"billToSameAsSoldTo\": true,\n  \"billTo\": {\n    \"lastName\": \"string\",\n    \"address1\": \"string\",\n    \"city\": \"string\",\n    \"zipCode\": \"string\",\n    \"country\": \"FR\",\n    \"email\": \"string\",\n    \"phone\": \"string\"\n  },\n  \"billing\": {\n    \"billingCycleCode\": \"string\",\n    \"electronicBilling\": true,\n    \"mailingType\": \"string\",\n    \"emailTemplateCode\": \"string\",\n    \"taxCategoryCode\": \"string\",\n    \"ccedEmails\": \"string\",\n    \"invoicingThreshold\": 0,\n    \"invoicePrefix\": \"string\",\n    \"checkThreshold\": \"string\",\n    \"thresholdPerEntity\": true\n  },\n  \"paymentMethodType\": \"DIRECTDEBIT\",\n  \"paymentMethodAlias\": \"string\",\n  \"paymentMethodPreferred\": true,\n  \"bankCoordinates\": {\n    \"iban\": \"FR7630006000011234567890189\",\n    \"bic\": \"AGRIFRPP\",\n    \"accountOwner\": \"string\",\n    \"bankName\": \"string\"\n  },\n  \"paymentTerms\": \"string\",\n  \"creditCategory\": \"string\",\n  \"dueDateDelay_fx\": \"string\",\n  \"invoicingThreshold\": 0,\n  \"registrationNumbers\": [\n    {\n      \"registrationNo\": \"552100554\",\n      \"isoIcdCode\": \"0002\"\n    }\n  ],\n  \"legalEntityTypeCode\": \"string\",\n  \"exemptionReason\": \"string\",\n  \"taxExemptCertificateId\": \"string\",\n  \"taxExemptEffectiveDate\": \"2026-01-01T00:00:00+00:00\",\n  \"taxExemptExpirationDate\": \"2026-12-31T00:00:00+00:00\",\n  \"mandateIdentification\": \"string\",\n  \"mandateDate\": \"2026-01-15T00:00:00+00:00\",\n  \"generalClientAccountCode\": \"string\",\n  \"discountPlanCodes\": [\n    \"string\"\n  ],\n  \"businessAccountModelCode\": \"string\",\n  \"einvoicingEnabled\": true,\n  \"einvoiceEndpointId\": \"string\",\n  \"einvoiceEndpointSchemeId\": \"string\",\n  \"einvoiceCountryProfile\": \"string\",\n  \"einvoiceBusinessCategory\": \"string\",\n  \"eInvoicingEnabled\": false,\n  \"eInvoiceEndpointId\": \"string\",\n  \"eInvoiceEndpointSchemeId\": \"string\",\n  \"eInvoiceCountryProfile\": \"string\",\n  \"eInvoiceBusinessCategory\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the hierarchy if the account does not exist, otherwise updates it in place. Safe to retry. The path code wins over any code in the body."
     }
    },
    {
     "name": "Update an account hierarchy",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccounts/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccounts",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"CUST_ACME\",\n  \"name\": \"Acme Corp\",\n  \"hierarchyType\": \"S_CA_BA_UA\",\n  \"parentCode\": \"string\",\n  \"customerCategoryCode\": \"MARKETPLACE_ACCOUNTS\",\n  \"isCompany\": true,\n  \"currencyCode\": \"EUR\",\n  \"languageCode\": \"ENG\",\n  \"customerBrand\": \"string\",\n  \"externalRef1\": \"string\",\n  \"externalRef2\": \"string\",\n  \"vatNo\": \"FR12345678901\",\n  \"customFields\": {},\n  \"soldTo\": {\n    \"lastName\": \"string\",\n    \"address1\": \"string\",\n    \"city\": \"string\",\n    \"zipCode\": \"string\",\n    \"country\": \"FR\",\n    \"email\": \"string\",\n    \"phone\": \"string\"\n  },\n  \"billToSameAsSoldTo\": true,\n  \"billTo\": {\n    \"lastName\": \"string\",\n    \"address1\": \"string\",\n    \"city\": \"string\",\n    \"zipCode\": \"string\",\n    \"country\": \"FR\",\n    \"email\": \"string\",\n    \"phone\": \"string\"\n  },\n  \"billing\": {\n    \"billingCycleCode\": \"string\",\n    \"electronicBilling\": true,\n    \"mailingType\": \"string\",\n    \"emailTemplateCode\": \"string\",\n    \"taxCategoryCode\": \"string\",\n    \"ccedEmails\": \"string\",\n    \"invoicingThreshold\": 0,\n    \"invoicePrefix\": \"string\",\n    \"checkThreshold\": \"string\",\n    \"thresholdPerEntity\": true\n  },\n  \"paymentMethodType\": \"DIRECTDEBIT\",\n  \"paymentMethodAlias\": \"string\",\n  \"paymentMethodPreferred\": true,\n  \"bankCoordinates\": {\n    \"iban\": \"FR7630006000011234567890189\",\n    \"bic\": \"AGRIFRPP\",\n    \"accountOwner\": \"string\",\n    \"bankName\": \"string\"\n  },\n  \"paymentTerms\": \"string\",\n  \"creditCategory\": \"string\",\n  \"dueDateDelay_fx\": \"string\",\n  \"invoicingThreshold\": 0,\n  \"registrationNumbers\": [\n    {\n      \"registrationNo\": \"552100554\",\n      \"isoIcdCode\": \"0002\"\n    }\n  ],\n  \"legalEntityTypeCode\": \"string\",\n  \"exemptionReason\": \"string\",\n  \"taxExemptCertificateId\": \"string\",\n  \"taxExemptEffectiveDate\": \"2026-01-01T00:00:00+00:00\",\n  \"taxExemptExpirationDate\": \"2026-12-31T00:00:00+00:00\",\n  \"mandateIdentification\": \"string\",\n  \"mandateDate\": \"2026-01-15T00:00:00+00:00\",\n  \"generalClientAccountCode\": \"string\",\n  \"discountPlanCodes\": [\n    \"string\"\n  ],\n  \"businessAccountModelCode\": \"string\",\n  \"einvoicingEnabled\": true,\n  \"einvoiceEndpointId\": \"string\",\n  \"einvoiceEndpointSchemeId\": \"string\",\n  \"einvoiceCountryProfile\": \"string\",\n  \"einvoiceBusinessCategory\": \"string\",\n  \"eInvoicingEnabled\": false,\n  \"eInvoiceEndpointId\": \"string\",\n  \"eInvoiceEndpointSchemeId\": \"string\",\n  \"eInvoiceCountryProfile\": \"string\",\n  \"eInvoiceBusinessCategory\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing hierarchy by code. Partial-update semantics: a null or absent field keeps the current value, an empty value for the field type clears it."
     }
    },
    {
     "name": "Delete an account hierarchy",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccounts/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccounts",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Not yet supported through this endpoint. Always returns 501 Not Implemented."
     }
    },
    {
     "name": "Edit the root Customer node",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/businessAccounts/customers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "businessAccounts",
        "customers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": "TEST_A"
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"externalRef1\": \"SMOKE-REF-1\",\n  \"vatNo\": \"FR99999999901\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Partial update of a single Customer by code (the root Customer tier alone, not the full hierarchy). Null/absent keeps the current value, empty-for-type (\"\" or []) clears it. Supports rename via `updatedCode`. Three documented divergences from the standard update rule: `customerCategory` is back-filled from the existing customer when omitted (legacy requires it on every call); `companyName` is applied by the legacy layer only when the customer has no AdditionalDetails yet (write-once behavior); `registrationNo` on read is a comma-joined display of all registration numbers, not necessarily the last value written. No POST (root create covers it) and no GET (reads go through /api/v1/query/customer)."
     },
     "response": [
      {
       "name": "404 Not Found - unknown customer code",
       "originalRequest": {
        "method": "PUT",
        "header": [
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{base_url}}/api/v1/businessAccounts/customers/NO_SUCH_CUST",
         "host": [
          "{{base_url}}"
         ],
         "path": [
          "api",
          "v1",
          "businessAccounts",
          "customers",
          "NO_SUCH_CUST"
         ]
        },
        "body": {
         "mode": "raw",
         "raw": "{\n  \"externalRef1\": \"x\"\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "Not Found",
       "code": 404,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"No customer with code NO_SUCH_CUST\",\n  \"error_code\": \"resource-not-found\"\n}"
      }
     ]
    }
   ]
  },
  {
   "name": "Report Queries",
   "item": [
    {
     "name": "Create a saved report query",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/reportQueries",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "reportQueries"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"RQ_SMOKE_CUSTOMERS\",\n  \"description\": \"Smoke: customers by code\",\n  \"targetEntity\": \"customer\",\n  \"visibility\": \"PUBLIC\",\n  \"advancedQuery\": {\n    \"genericFields\": [\"code\", \"description\"],\n    \"filters\": {}\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a saved Query Studio query. code, targetEntity, visibility, and a non-empty advancedQuery are required. Fails 409 if the code already exists, or if the code/visibility pair collides with another user's query under the same visibility (folded-in legacy /verify rule). Slice 1: metadata CRUD plus synchronous execution only; see the Report Queries API docs page for what is deferred (schedule, async executions, result polling, file download, reportExtracts, standard reports)."
     },
     "response": [
      {
       "name": "409 Conflict - duplicate code",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{base_url}}/api/v1/reportQueries",
         "host": [
          "{{base_url}}"
         ],
         "path": [
          "api",
          "v1",
          "reportQueries"
         ]
        },
        "body": {
         "mode": "raw",
         "raw": "{\n  \"code\": \"RQ_SMOKE_CUSTOMERS\",\n  \"description\": \"Smoke: customers by code\",\n  \"targetEntity\": \"customer\",\n  \"visibility\": \"PUBLIC\",\n  \"advancedQuery\": {\n    \"genericFields\": [\"code\", \"description\"],\n    \"filters\": {}\n  }\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "Conflict",
       "code": 409,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Query Already exists and belong to you\",\n  \"error_code\": \"resource-already-exists\"\n}"
      },
      {
       "name": "400 Bad Request - missing advancedQuery",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{base_url}}/api/v1/reportQueries",
         "host": [
          "{{base_url}}"
         ],
         "path": [
          "api",
          "v1",
          "reportQueries"
         ]
        },
        "body": {
         "mode": "raw",
         "raw": "{\n  \"code\": \"RQ_NO_QUERY\",\n  \"targetEntity\": \"customer\",\n  \"visibility\": \"PUBLIC\"\n}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "Bad Request",
       "code": 400,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"advancedQuery is required and must be non-empty\",\n  \"error_code\": \"missing-parameter\"\n}"
      }
     ]
    },
    {
     "name": "Create or update a saved report query (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/reportQueries/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "reportQueries",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": "RQ_SMOKE_CUSTOMERS"
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"description\": \"Smoke: customers by code\",\n  \"targetEntity\": \"customer\",\n  \"visibility\": \"PUBLIC\",\n  \"advancedQuery\": {\n    \"genericFields\": [\"code\", \"description\"],\n    \"filters\": {}\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the query if absent (201, same validation as plain create), otherwise updates it (200). The path code wins over any code in the body."
     }
    },
    {
     "name": "Update a saved report query (partial)",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/reportQueries/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "reportQueries",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": "RQ_SMOKE_CUSTOMERS"
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"description\": \"Updated description\",\n  \"tags\": [\"finance\"]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Partial update: null/absent keeps the current value, empty-for-type (\"\", [], {}) clears it. One exception: advancedQuery cannot be cleared with {} (a saved query must always have a query) and returns 400 missing-parameter if attempted. tags and aliases use whole-collection replace semantics, not merge. A system query is read-only: PUT against one returns 409 resource-in-use."
     }
    },
    {
     "name": "Run a saved report query (sync)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/reportQueries/:code/executions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "reportQueries",
        ":code",
        "executions"
       ],
       "variable": [
        {
         "key": "code",
         "value": "RQ_SMOKE_CUSTOMERS"
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Runs the saved query by building a GenericPagingAndFiltering from the stored advancedQuery and targetEntity, and running it through the same engine /api/v1/query uses. Only mode=sync is available in this slice (also the default). Sync results are capped at 100 rows, matching the query engine's own api.list.defaultLimit default; rows beyond the cap are silently truncated."
     },
     "response": [
      {
       "name": "200 OK - sync execution result",
       "originalRequest": {
        "method": "POST",
        "header": [
         {
          "key": "Content-Type",
          "value": "application/json"
         }
        ],
        "url": {
         "raw": "{{base_url}}/api/v1/reportQueries/RQ_SMOKE_CUSTOMERS/executions",
         "host": [
          "{{base_url}}"
         ],
         "path": [
          "api",
          "v1",
          "reportQueries",
          "RQ_SMOKE_CUSTOMERS",
          "executions"
         ]
        },
        "body": {
         "mode": "raw",
         "raw": "{}",
         "options": {
          "raw": {
           "language": "json"
          }
         }
        }
       },
       "status": "OK",
       "code": 200,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"SUCCESS\",\n  \"rowCount\": 25,\n  \"rows\": [\n    {\n      \"code\": \"LIDLE\",\n      \"description\": \"LIDLE Belgium\"\n    }\n  ]\n}"
      },
      {
       "name": "400 Bad Request - mode=async not yet available",
       "originalRequest": {
        "method": "POST",
        "header": [],
        "url": {
         "raw": "{{base_url}}/api/v1/reportQueries/RQ_SMOKE_CUSTOMERS/executions?mode=async",
         "host": [
          "{{base_url}}"
         ],
         "path": [
          "api",
          "v1",
          "reportQueries",
          "RQ_SMOKE_CUSTOMERS",
          "executions"
         ],
         "query": [
          {
           "key": "mode",
           "value": "async"
          }
         ]
        }
       },
       "status": "Bad Request",
       "code": 400,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"Async execution is not yet available; only mode=sync is supported in this slice\",\n  \"error_code\": \"invalid-parameter\"\n}"
      },
      {
       "name": "404 Not Found - unknown code",
       "originalRequest": {
        "method": "POST",
        "header": [],
        "url": {
         "raw": "{{base_url}}/api/v1/reportQueries/NO_SUCH_RQ/executions",
         "host": [
          "{{base_url}}"
         ],
         "path": [
          "api",
          "v1",
          "reportQueries",
          "NO_SUCH_RQ",
          "executions"
         ]
        }
       },
       "status": "Not Found",
       "code": 404,
       "_postman_previewlanguage": "json",
       "header": [
        {
         "key": "Content-Type",
         "value": "application/json"
        }
       ],
       "cookie": [],
       "body": "{\n  \"status\": \"FAIL\",\n  \"message\": \"No report query with code NO_SUCH_RQ\",\n  \"error_code\": \"resource-not-found\"\n}"
      }
     ]
    },
    {
     "name": "Delete a saved report query",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/reportQueries/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "reportQueries",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": "RQ_SMOKE_CUSTOMERS"
        }
       ]
      },
      "description": "Deletes the saved query. Returns 204 with no body. Fails 404 if the code does not exist, 409 resource-in-use if the query is a system query."
     },
     "response": [
      {
       "name": "204 No Content",
       "originalRequest": {
        "method": "DELETE",
        "header": [],
        "url": {
         "raw": "{{base_url}}/api/v1/reportQueries/RQ_SMOKE_CUSTOMERS",
         "host": [
          "{{base_url}}"
         ],
         "path": [
          "api",
          "v1",
          "reportQueries",
          "RQ_SMOKE_CUSTOMERS"
         ]
        }
       },
       "status": "No Content",
       "code": 204,
       "_postman_previewlanguage": "json",
       "header": [],
       "cookie": [],
       "body": ""
      }
     ]
    }
   ]
  },
  {
   "name": "Api Credentials",
   "item": [
    {
     "name": "List API credentials",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/apiCredentials",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "apiCredentials"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of OAuth2 confidential clients. Secrets are never included."
     }
    },
    {
     "name": "Create an API credential",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/apiCredentials",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "apiCredentials"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"clientId\": \"acme-integration\",\n  \"name\": \"Acme integration\",\n  \"enabled\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new OAuth2 confidential client. Returns the clientSecret exactly once, in this response. Returns 409 when a client with the same clientId already exists."
     }
    },
    {
     "name": "Get an API credential by clientId",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/apiCredentials/:clientId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "apiCredentials",
        ":clientId"
       ],
       "variable": [
        {
         "key": "clientId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single OAuth2 confidential client. The secret is never included."
     }
    },
    {
     "name": "Update an API credential",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/apiCredentials/:clientId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "apiCredentials",
        ":clientId"
       ],
       "variable": [
        {
         "key": "clientId",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"clientId\": \"acme-integration\",\n  \"name\": \"Acme integration\",\n  \"enabled\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates the name and/or enabled flag of an existing client. Partial-update semantics: a null field keeps the stored value. Never returns or accepts the secret; use secret-rotation for that."
     }
    },
    {
     "name": "Delete an API credential",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/apiCredentials/:clientId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "apiCredentials",
        ":clientId"
       ],
       "variable": [
        {
         "key": "clientId",
         "value": ""
        }
       ]
      },
      "description": "Removes the OAuth2 confidential client identified by clientId."
     }
    },
    {
     "name": "Rotate an API credential's secret",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/apiCredentials/:clientId/secret-rotation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "apiCredentials",
        ":clientId",
        "secret-rotation"
       ],
       "variable": [
        {
         "key": "clientId",
         "value": ""
        }
       ]
      },
      "description": "Generates a new client secret, invalidating the previous one. Returns the new clientSecret exactly once, in this response."
     }
    }
   ]
  },
  {
   "name": "Auth",
   "item": [
    {
     "name": "Get current session",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/auth/session",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "auth",
        "session"
       ]
      },
      "description": "Returns the current authenticated caller's profile, effective realm roles, group memberships, and client roles. All data is read from the JWT access token, so it reflects exactly what the token grants. Returns 401 when no valid bearer token is present."
     }
    }
   ]
  },
  {
   "name": "Billing Run Schedules",
   "item": [
    {
     "name": "List bill-run schedules",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRunSchedules",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRunSchedules"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        },
        {
         "key": "q",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of schedules, newest first by default. The q parameter OR-matches code and description. Read-only."
     }
    },
    {
     "name": "Create a bill-run schedule",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRunSchedules",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRunSchedules"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"string\",\n  \"repeats\": \"NONE\",\n  \"cron\": {\n    \"second\": \"string\",\n    \"minute\": \"string\",\n    \"hour\": \"string\",\n    \"dayOfMonth\": \"string\",\n    \"month\": \"string\",\n    \"dayOfWeek\": \"string\",\n    \"year\": \"string\"\n  },\n  \"startDate\": \"string\",\n  \"endDate\": \"string\",\n  \"billingCycleCodes\": [\n    \"string\"\n  ],\n  \"processType\": \"AUTOMATIC\",\n  \"lastTransactionDate\": \"string\",\n  \"invoiceDate\": \"string\",\n  \"rejectAutoAction\": \"string\",\n  \"suspectAutoAction\": \"string\",\n  \"generateAO\": true,\n  \"computeDatesAtValidation\": true,\n  \"active\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a schedule (a timer plus a billing job instance). A duplicate name/code returns 409; an invalid cadence/cron returns 400."
     }
    },
    {
     "name": "Get one bill-run schedule",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRunSchedules/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRunSchedules",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single schedule by code, including its next fire time and last run. Read-only."
     }
    },
    {
     "name": "Update a bill-run schedule",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRunSchedules/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRunSchedules",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"string\",\n  \"repeats\": \"NONE\",\n  \"cron\": {\n    \"second\": \"string\",\n    \"minute\": \"string\",\n    \"hour\": \"string\",\n    \"dayOfMonth\": \"string\",\n    \"month\": \"string\",\n    \"dayOfWeek\": \"string\",\n    \"year\": \"string\"\n  },\n  \"startDate\": \"string\",\n  \"endDate\": \"string\",\n  \"billingCycleCodes\": [\n    \"string\"\n  ],\n  \"processType\": \"AUTOMATIC\",\n  \"lastTransactionDate\": \"string\",\n  \"invoiceDate\": \"string\",\n  \"rejectAutoAction\": \"string\",\n  \"suspectAutoAction\": \"string\",\n  \"generateAO\": true,\n  \"computeDatesAtValidation\": true,\n  \"active\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update a schedule's cadence, cron, cycles, and options. Partial-update semantics."
     }
    },
    {
     "name": "Delete a bill-run schedule",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRunSchedules/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRunSchedules",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete a schedule along with its timer and job instance. Returns 204 on success."
     }
    },
    {
     "name": "Pause a bill-run schedule",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRunSchedules/:code/pause",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRunSchedules",
        ":code",
        "pause"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Disable a recurring schedule so it stops firing. No future firings until resumed."
     }
    },
    {
     "name": "Resume a bill-run schedule",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRunSchedules/:code/resume",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRunSchedules",
        ":code",
        "resume"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Re-enable a paused schedule so it fires again per its cadence."
     }
    },
    {
     "name": "Run a bill-run schedule now",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRunSchedules/:code/runNow",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRunSchedules",
        ":code",
        "runNow"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fire the schedule's job immediately, regardless of its timer. Returns 202 with a job run id to poll."
     }
    }
   ]
  },
  {
   "name": "Billing Runs",
   "item": [
    {
     "name": "List bill runs",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns"
       ],
       "query": [
        {
         "key": "status",
         "value": "",
         "disabled": true
        },
        {
         "key": "billingAccountCode",
         "value": "",
         "disabled": true
        },
        {
         "key": "billingCycleCode",
         "value": "",
         "disabled": true
        },
        {
         "key": "from",
         "value": "",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "disabled": true
        },
        {
         "key": "isQuarantine",
         "value": "",
         "disabled": true
        },
        {
         "key": "originBillingRunId",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of bill runs, filterable by status, billing account, billing cycle, date range, quarantine flag, and origin run. Read-only."
     }
    },
    {
     "name": "Create and run a bill run (sync)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"billingAccountCodes\": [\n    \"string\"\n  ],\n  \"billingCycleCode\": \"string\",\n  \"filters\": {},\n  \"applicationEl\": \"string\",\n  \"invoiceDate\": \"string\",\n  \"lastTransactionDate\": \"string\",\n  \"processType\": \"FULL_AUTOMATIC\",\n  \"description\": \"string\",\n  \"code\": \"string\",\n  \"validationScriptCode\": \"string\",\n  \"defaultInvoiceTypeCode\": \"string\",\n  \"runOptions\": {\n    \"autoValidate\": true,\n    \"autoPost\": true,\n    \"skipValidationScript\": true,\n    \"applyMinimum\": true,\n    \"applyThreshold\": true,\n    \"applyDiscount\": true,\n    \"rejectAutoAction\": \"string\",\n    \"suspectAutoAction\": \"string\",\n    \"computeDatesAtValidation\": true\n  },\n  \"disableAggregation\": true,\n  \"dateAggregation\": \"string\",\n  \"discountAggregation\": \"string\",\n  \"useAccountingArticleLabel\": true,\n  \"aggregateUnitAmounts\": true,\n  \"ignoreSubscriptions\": true,\n  \"ignoreOrders\": true,\n  \"ignoreUserAccounts\": true,\n  \"ignoreServiceInstances\": true,\n  \"incrementalInvoiceLines\": true,\n  \"additionalAggregationFields\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a bill run and process it synchronously up to DRAFT_INVOICES, or up to VALIDATED when runOptions.autoValidate is true. Scope comes from any combination of billingAccountCodes, billingCycleCode, and filters; none set bills every eligible account. A duplicate code returns 409; a scope with nothing to bill returns 422."
     }
    },
    {
     "name": "Create and run a bill run (async)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/async",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        "async"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"billingAccountCodes\": [\n    \"string\"\n  ],\n  \"billingCycleCode\": \"string\",\n  \"filters\": {},\n  \"applicationEl\": \"string\",\n  \"invoiceDate\": \"string\",\n  \"lastTransactionDate\": \"string\",\n  \"processType\": \"FULL_AUTOMATIC\",\n  \"description\": \"string\",\n  \"code\": \"string\",\n  \"validationScriptCode\": \"string\",\n  \"defaultInvoiceTypeCode\": \"string\",\n  \"runOptions\": {\n    \"autoValidate\": true,\n    \"autoPost\": true,\n    \"skipValidationScript\": true,\n    \"applyMinimum\": true,\n    \"applyThreshold\": true,\n    \"applyDiscount\": true,\n    \"rejectAutoAction\": \"string\",\n    \"suspectAutoAction\": \"string\",\n    \"computeDatesAtValidation\": true\n  },\n  \"disableAggregation\": true,\n  \"dateAggregation\": \"string\",\n  \"discountAggregation\": \"string\",\n  \"useAccountingArticleLabel\": true,\n  \"aggregateUnitAmounts\": true,\n  \"ignoreSubscriptions\": true,\n  \"ignoreOrders\": true,\n  \"ignoreUserAccounts\": true,\n  \"ignoreServiceInstances\": true,\n  \"incrementalInvoiceLines\": true,\n  \"additionalAggregationFields\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a bill run and process it in a background job (fire-and-forget). Returns 202 with a job run id to poll."
     }
    },
    {
     "name": "Get one bill run",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single bill run by id, including totals, invoice summaries, job executions, and quarantine surface. Read-only."
     }
    },
    {
     "name": "Update a bill run",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"description\": \"string\",\n  \"processType\": \"string\",\n  \"invoiceDate\": \"string\",\n  \"lastTransactionDate\": \"string\",\n  \"startDate\": \"string\",\n  \"endDate\": \"string\",\n  \"applicationEl\": \"string\",\n  \"defaultInvoiceTypeCode\": \"string\",\n  \"validationScriptCode\": \"string\",\n  \"runOptions\": {\n    \"autoValidate\": true,\n    \"autoPost\": true,\n    \"skipValidationScript\": true,\n    \"applyMinimum\": true,\n    \"applyThreshold\": true,\n    \"applyDiscount\": true,\n    \"rejectAutoAction\": \"string\",\n    \"suspectAutoAction\": \"string\",\n    \"computeDatesAtValidation\": true\n  },\n  \"disableAggregation\": true,\n  \"dateAggregation\": \"string\",\n  \"discountAggregation\": \"string\",\n  \"useAccountingArticleLabel\": true,\n  \"aggregateUnitAmounts\": true,\n  \"ignoreSubscriptions\": true,\n  \"ignoreOrders\": true,\n  \"ignoreUserAccounts\": true,\n  \"ignoreServiceInstances\": true,\n  \"incrementalInvoiceLines\": true,\n  \"additionalAggregationFields\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Partial update of a bill run. Status-gated: core and aggregation fields are editable only in NEW/OPEN, validation/processing options until POSTINVOICED, and terminal statuses reject with 409. A field locked for the current status returns 422 FIELD_LOCKED_FOR_STATUS. Null or absent fields keep their current value."
     }
    },
    {
     "name": "Delete a bill run",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Delete a bill run. Only allowed for runs in NEW or CANCELED status. Returns 204 on success."
     }
    },
    {
     "name": "Advance a bill run's status",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/advanceStatus",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "advanceStatus"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"force\": true,\n  \"ratedTransactionAction\": \"REOPEN\",\n  \"executeInvoicingJob\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Drive the run to its next status via the invoicing job. Set executeInvoicingJob=false to advance without triggering the job."
     }
    },
    {
     "name": "Cancel a bill run",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/cancel",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "cancel"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"force\": true,\n  \"ratedTransactionAction\": \"REOPEN\",\n  \"executeInvoicingJob\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Deprecated alias for POST /billingRuns/{id}/cancellation. Cancel the run. ratedTransactionAction controls whether its rated transactions are reopened (default) or canceled."
     }
    },
    {
     "name": "Cancel a bill run",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/cancellation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "cancellation"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"force\": true,\n  \"ratedTransactionAction\": \"REOPEN\",\n  \"executeInvoicingJob\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Cancel the run. ratedTransactionAction controls whether its rated transactions are reopened (default) or canceled."
     }
    },
    {
     "name": "Generate invoice PDFs for a bill run (async)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/pdf",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "pdf"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Trigger the PDF job for the run's invoices. Returns 202 with a job run id to poll."
     }
    },
    {
     "name": "Post-invoice a bill run",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/postInvoice",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "postInvoice"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"force\": true,\n  \"ratedTransactionAction\": \"REOPEN\",\n  \"executeInvoicingJob\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Run the post-invoicing step, finalizing the validated invoices."
     }
    },
    {
     "name": "Quarantine invoices of a bill run",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/quarantineInvoices",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "quarantineInvoices"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"invoiceIds\": [\n    0\n  ],\n  \"description\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Move selected draft invoices into a consolidated quarantine child run for manual review. Valid only when the run is in DRAFT_INVOICES or POSTINVOICED (else 409). Returns 400 if invoiceIds is empty; 422 if an invoice does not belong to this run."
     }
    },
    {
     "name": "Release invoices from a quarantine run",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/releaseFromQuarantine",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "releaseFromQuarantine"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"invoiceIds\": [\n    0\n  ],\n  \"action\": \"REVALIDATE\",\n  \"targetBillingRunId\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Release quarantined invoices with REVALIDATE, CANCEL, or CANCEL_RT. Only valid on a run where isQuarantine is true (else 409). Returns 400 when invoiceIds is empty or action is unknown."
     }
    },
    {
     "name": "Generate the post-invoicing report for a bill run",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/report",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "report"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Compute and return the flat post-invoicing report (numeric aggregates) for the run. Returns 404 if the run does not exist."
     }
    },
    {
     "name": "Validate a bill run",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/validate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "validate"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"force\": true,\n  \"ratedTransactionAction\": \"REOPEN\",\n  \"executeInvoicingJob\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Deprecated alias for POST /billingRuns/{id}/validation. Validate the run's draft invoices (cheap service-direct call). Set force=true to bypass the validation script."
     }
    },
    {
     "name": "Validate a bill run",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/validation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "validation"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"force\": true,\n  \"ratedTransactionAction\": \"REOPEN\",\n  \"executeInvoicingJob\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Validate the run's draft invoices (cheap service-direct call). Set force=true to bypass the validation script."
     }
    },
    {
     "name": "Generate invoice XML for a bill run (async)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingRuns/:id/xml",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingRuns",
        ":id",
        "xml"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Trigger the XML invoice generation job (Peppol prep) for the run's invoices. Returns 202 with a job run id to poll."
     }
    }
   ]
  },
  {
   "name": "Platform Runs",
   "description": "Core Platform Runs: business-facing batch operations over the job engine (Mediation Run, Usage Rating Run, Payment Run, ...) with a Zuora-style status machine. Failed runs can be resumed (POST /{code}/resume) to continue from the first unfinished step. Scheduled (managed) runs retry once automatically after a delay and raise an alert if the retry also fails; the run's retryState (NONE/RETRIED/ALERTED) and autoRetry flag expose this. Billing Runs keep their dedicated resource at /api/v1/billingRuns.",
   "item": [
    {
     "name": "Run catalog",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/runs/catalog"
      },
      "description": "All run types with display names, stages, parameter schemas, execution mode (MANAGED vs ON_DEMAND) and dedicated-resource pointers."
     }
    },
    {
     "name": "Launch a run",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/runs"
      },
      "description": "Launch ad hoc. 202 with the created run; poll GET /runs/{code}. 409 when a run of this type is already active; 422 for unknown type, catalog-only type (BILLING) or invalid parameters.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"runType\": \"RATED_TRANSACTIONS\",\n  \"description\": \"Convert open wallet operations\"\n}"
      }
     }
    },
    {
     "name": "Launch the Re-rating sequence",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/runs"
      },
      "description": "Sequences chain several stages; steps advance automatically as each completes.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"runType\": \"RE_RATING\",\n  \"description\": \"3-stage re-rating\"\n}"
      }
     }
    },
    {
     "name": "List runs",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/runs?runType=RATED_TRANSACTIONS&status=COMPLETED&limit=20&offset=0"
      },
      "description": "Paginated run history, filterable by runType, status, origin."
     }
    },
    {
     "name": "Get a run",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/runs/RUN-1"
      },
      "description": "One run with steps, rolled-up counters and job execution links. Running steps show live counters."
     }
    },
    {
     "name": "Resume a failed run",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/runs/RUN-12/resume"
      },
      "description": "Creates a follow-up run linked through resumedFrom. Completed steps are carried over; execution restarts at the first unfinished step. 404 unknown, 409 another run of the type active, 422 still active or fully completed."
     }
    },
    {
     "name": "Cancel a run",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/runs/RUN-1/cancellation"
      },
      "description": "202: pending steps cancel immediately, the running step stops via the job engine and confirms asynchronously. 422 when the run is already finished."
     }
    }
   ]
  },
  {
   "name": "Billing Documents",
   "item": [
    {
     "name": "Create a basic (manual) invoice",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"billingAccountCode\": \"BA_ACME\",\n  \"invoiceTypeCode\": \"string\",\n  \"invoiceDate\": \"string\",\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a basic invoice on a billing account with no rated transactions. Required: billingAccountCode. Returns 201."
     }
    },
    {
     "name": "Generate invoices from rated transactions",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/generate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        "generate"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"billingAccountCode\": \"BA_ACME\",\n  \"invoicingDate\": \"string\",\n  \"firstTransactionDate\": \"string\",\n  \"lastTransactionDate\": \"string\",\n  \"includeRatedTransactions\": true,\n  \"generateAO\": true,\n  \"generatePDF\": true,\n  \"applyMinimum\": \"string\",\n  \"skipValidation\": true,\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Generate one or more invoices from a billing account's open rated transactions within the requested date window. Required: billingAccountCode, invoicingDate. Returns the produced invoices."
     }
    },
    {
     "name": "Update an invoice",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"invoiceDate\": \"string\",\n  \"dueDate\": \"string\",\n  \"sellerCode\": \"SELLER_FR\",\n  \"paymentMethodId\": 0,\n  \"discountPlanId\": 0,\n  \"comment\": \"string\",\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an editable invoice's date, due date, seller, payment method, discount plan, comment, or custom fields. Only invoices in status NEW, DRAFT, SUSPECT, or REJECTED can be updated. A null/absent field keeps its existing value; an empty value clears it."
     }
    },
    {
     "name": "Recalculate an invoice",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/calculation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "calculation"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Recompute an editable invoice's totals from its current lines. Asynchronous side effects (billing run statistics update) may complete after the response is returned."
     }
    },
    {
     "name": "Cancel an invoice",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/cancellation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "cancellation"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"ratedTransactionAction\": \"REOPEN\",\n  \"cancelReason\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Cancel an invoice that is not yet VALIDATED. The cancelReason is persisted on the invoice (closing the apiv2 gap where it was accepted but silently ignored)."
     }
    },
    {
     "name": "Duplicate an invoice",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/duplication",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "duplication"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Create a copy of an invoice with a new status."
     }
    },
    {
     "name": "Add invoice lines",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/lines",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "lines"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"lines\": [\n    {\n      \"accountingArticleCode\": \"ART_STANDARD\",\n      \"label\": \"string\",\n      \"quantity\": 0,\n      \"unitPrice\": 0,\n      \"taxRate\": 0,\n      \"taxMode\": \"ARTICLE\",\n      \"taxCode\": \"string\",\n      \"taxAccountingCode\": \"string\",\n      \"discountPlanCode\": \"string\",\n      \"userAccountCode\": \"string\",\n      \"valueDate\": \"string\",\n      \"startDate\": \"string\",\n      \"endDate\": \"string\",\n      \"customFields\": {\n        \"customField\": [\n          null\n        ],\n        \"inheritedCustomField\": [\n          null\n        ]\n      }\n    }\n  ],\n  \"skipValidation\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Add one or more lines to an editable invoice (NEW, DRAFT, SUSPECT, REJECTED). skipValidation defaults to true; call /calculation separately to recompute totals."
     }
    },
    {
     "name": "Update an invoice line",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/lines/:lineId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "lines",
        ":lineId"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        },
        {
         "key": "lineId",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"accountingArticleCode\": \"ART_STANDARD\",\n  \"label\": \"string\",\n  \"quantity\": 0,\n  \"unitPrice\": 0,\n  \"taxRate\": 0,\n  \"taxMode\": \"ARTICLE\",\n  \"taxCode\": \"string\",\n  \"taxAccountingCode\": \"string\",\n  \"discountPlanCode\": \"string\",\n  \"userAccountCode\": \"string\",\n  \"valueDate\": \"string\",\n  \"startDate\": \"string\",\n  \"endDate\": \"string\",\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update one line of an editable invoice (NEW, DRAFT, SUSPECT, REJECTED)."
     }
    },
    {
     "name": "Remove an invoice line",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/lines/:lineId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "lines",
        ":lineId"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        },
        {
         "key": "lineId",
         "value": ""
        }
       ]
      },
      "description": "Remove one line from an editable invoice (NEW, DRAFT, SUSPECT, REJECTED)."
     }
    },
    {
     "name": "Get an invoice's PDF",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/pdf",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "pdf"
       ],
       "query": [
        {
         "key": "generateIfMissing",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Return an invoice's PDF file. When generateIfMissing is false (default) and no file exists yet, returns 404. When true and no file exists, the PDF is rendered synchronously. If a file already exists, it is returned regardless of the flag."
     }
    },
    {
     "name": "Reject an invoice",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/rejection",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "rejection"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"rejectReason\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Reject an invoice in status NEW, DRAFT, or SUSPECT. Required: rejectReason."
     }
    },
    {
     "name": "Validate an invoice",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/validation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "validation"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Validate an invoice, assigning its permanent invoice number. This cannot be undone: once VALIDATED, the invoice can no longer be edited, and can only be canceled (not re-validated)."
     }
    },
    {
     "name": "Get an invoice's XML",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/xml",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "xml"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Return an invoice's XML document, producing it on demand when missing. Returns 404 if the invoice does not exist and 409 if the invoice is prepaid (XML disabled)."
     }
    }
   ]
  },
  {
   "name": "Rated Transactions",
   "item": [
    {
     "name": "Cancel rated transactions",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/ratedTransactions/cancel",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "ratedTransactions",
        "cancel"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"filters\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Deprecated alias for POST /ratedTransactions/cancellation. Cancel the rated transactions matching the filter map so they are excluded from future bill runs. An empty or null filter cancels all open/rejected rated transactions. Returns 200 with a CANCELED status."
     }
    },
    {
     "name": "Cancel rated transactions",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/ratedTransactions/cancellation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "ratedTransactions",
        "cancellation"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"filters\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Cancel the rated transactions matching the filter map so they are excluded from future bill runs. An empty or null filter cancels all open/rejected rated transactions. Returns 200 with a CANCELED status."
     }
    }
   ]
  },
  {
   "name": "Subscriptions",
   "item": [
    {
     "name": "Submit a typed action on a subscription",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/subscriptions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "subscriptions"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"subscriptionActionType\": \"CREATE\",\n  \"code\": \"string\",\n  \"externalReference\": \"string\",\n  \"userAccountCode\": \"string\",\n  \"offerTemplateCode\": \"string\",\n  \"sellerCode\": \"string\",\n  \"subscriptionDate\": \"string\",\n  \"endAgreementDate\": \"string\",\n  \"contractCode\": \"string\",\n  \"paymentMethodCode\": \"string\",\n  \"billSeparately\": true,\n  \"activationDate\": \"string\",\n  \"tradingCurrencyCode\": \"string\",\n  \"services\": [\n    {\n      \"code\": \"string\",\n      \"productActionType\": \"CREATE\",\n      \"serviceTemplateCode\": \"string\",\n      \"quantity\": 0,\n      \"subscriptionDate\": \"string\",\n      \"endAgreementDate\": \"string\",\n      \"terminationDate\": \"string\",\n      \"terminationReasonCode\": \"string\",\n      \"activationDate\": \"string\",\n      \"billSeparately\": true,\n      \"suspensionReason\": \"string\",\n      \"extendTermBySuspensionDuration\": true,\n      \"charges\": [\n        {\n          \"chargeCode\": null,\n          \"description\": null,\n          \"quantity\": null,\n          \"taxInclusive\": null,\n          \"taxClassCode\": null,\n          \"tradingCurrencyCode\": null,\n          \"invoicingCalendarCode\": null,\n          \"billSeparately\": null,\n          \"pricing\": null,\n          \"recurring\": null,\n          \"usage\": null,\n          \"chargeAttributes\": null,\n          \"customFields\": null,\n          \"resetFields\": null,\n          \"removeChargeAttributes\": null\n        }\n      ],\n      \"removeCharges\": [\n        \"string\"\n      ],\n      \"serviceAttributes\": [\n        {\n          \"attributeCode\": null,\n          \"stringValue\": null,\n          \"numericValue\": null,\n          \"booleanValue\": null,\n          \"dateValue\": null\n        }\n      ],\n      \"removeServiceAttributes\": [\n        \"string\"\n      ],\n      \"customFields\": {}\n    }\n  ],\n  \"subscriptionAttributes\": [\n    {\n      \"attributeCode\": \"string\",\n      \"stringValue\": \"string\",\n      \"numericValue\": 0,\n      \"booleanValue\": true,\n      \"dateValue\": \"string\"\n    }\n  ],\n  \"removeSubscriptionAttributes\": [\n    \"string\"\n  ],\n  \"customFields\": {},\n  \"termsAndConditions\": {\n    \"type\": \"string\",\n    \"initialTerm\": {\n      \"duration\": 0,\n      \"unit\": \"string\",\n      \"endDate\": \"string\",\n      \"calendar\": \"string\"\n    },\n    \"autoRenew\": true,\n    \"renewalTerm\": {\n      \"duration\": 0,\n      \"unit\": \"string\",\n      \"endDate\": \"string\",\n      \"calendar\": \"string\"\n    },\n    \"onExpiry\": \"string\",\n    \"terminationReason\": \"string\",\n    \"notifyDaysBefore\": 0,\n    \"alignEndDate\": true\n  },\n  \"transfer\": {\n    \"targetUserAccountCode\": \"string\",\n    \"openTransactionsAction\": \"NONE\"\n  },\n  \"renew\": {\n    \"extendForDuration\": 0,\n    \"extendForUnit\": \"MONTH\",\n    \"reEnableAutoRenew\": true\n  },\n  \"changePlan\": {\n    \"targetOfferTemplateCode\": \"string\",\n    \"effectiveDate\": \"string\",\n    \"terminationReasonCode\": \"string\",\n    \"newSubscriptionCode\": \"string\",\n    \"terminateOldSubscription\": true,\n    \"reengageCustomer\": true,\n    \"resetRenewalTerms\": true,\n    \"priceListCode\": \"string\",\n    \"servicesToInstantiate\": [\n      \"string\"\n    ],\n    \"servicesToActivate\": [\n      \"string\"\n    ],\n    \"subscriptionCustomFieldsToCopy\": [\n      \"string\"\n    ]\n  },\n  \"terminationDate\": \"string\",\n  \"terminationReasonCode\": \"string\",\n  \"chargeItems\": [\n    {\n      \"externalReference\": \"string\",\n      \"chargeCode\": \"string\",\n      \"quantity\": 0,\n      \"applicationDate\": \"string\",\n      \"description\": \"string\",\n      \"pricing\": {\n        \"chargeCode\": \"string\",\n        \"description\": \"string\",\n        \"quantity\": 0,\n        \"taxInclusive\": true,\n        \"taxClassCode\": \"string\",\n        \"tradingCurrencyCode\": \"string\",\n        \"invoicingCalendarCode\": \"string\",\n        \"billSeparately\": true,\n        \"pricing\": {\n          \"pricingModel\": null,\n          \"price\": null,\n          \"priceWithTax\": null,\n          \"ratingScriptCode\": null,\n          \"bands\": null,\n          \"matrixColumns\": null,\n          \"matrixCells\": null,\n          \"inputUomCode\": null,\n          \"ratingUomCode\": null,\n          \"unitMultiplicator\": null,\n          \"unitNbDecimal\": null,\n          \"roundingMode\": null,\n          \"price_fx\": null,\n          \"filter_fx\": null,\n          \"total_amount_fx\": null,\n          \"minimum_amount_fx\": null\n        },\n        \"recurring\": {\n          \"calendarCode\": null,\n          \"durationTermInMonth\": null,\n          \"subscriptionProrata\": null,\n          \"terminationProrata\": null,\n          \"prorataOnPriceChange\": null,\n          \"applyInAdvance\": null,\n          \"subscription_prorata_fx\": null,\n          \"termination_prorata_fx\": null,\n          \"apply_in_advance_fx\": null,\n          \"duration_term_in_month_fx\": null,\n          \"calendar_code_fx\": null\n        },\n        \"usage\": {\n          \"filterParam1\": null,\n          \"filterParam2\": null,\n          \"filterParam3\": null,\n          \"filterParam4\": null,\n          \"priority\": null,\n          \"triggerNextCharge\": null,\n          \"ratingPeriodCalendarCode\": null,\n          \"accumulatorType\": null,\n          \"trackedValue\": null,\n          \"initialValue\": null,\n          \"trigger_next_charge_fx\": null,\n          \"acc_filter_fx\": null,\n          \"acc_key_fx\": null,\n          \"acc_value_fx\": null\n        },\n        \"chargeAttributes\": [\n          null\n        ],\n        \"customFields\": {},\n        \"resetFields\": [\n          null\n        ],\n        \"removeChargeAttributes\": [\n          null\n        ]\n      }\n    }\n  ],\n  \"operationDate\": \"string\",\n  \"suspensionReason\": \"string\",\n  \"extendTermBySuspensionDuration\": true,\n  \"removeServices\": [\n    \"string\"\n  ],\n  \"accessCodes\": [\n    \"string\"\n  ],\n  \"removeAccessCodes\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Perform a lifecycle action on a subscription. The action is declared by the payload's subscriptionActionType field (CREATE, AMEND, TERMINATE, SUSPEND, RESUME, ...); field applicability depends on the action. This single endpoint replaces the legacy per-verb routes."
     }
    },
    {
     "name": "Create and CPQ-instantiate a subscription",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/subscriptions/instantiate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "subscriptions",
        "instantiate"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"string\",\n  \"userAccount\": \"UA_ACME\",\n  \"offerTemplate\": \"OFFER_STD\",\n  \"seller\": \"string\",\n  \"subscriptionDate\": \"string\",\n  \"billingCycle\": \"string\",\n  \"description\": \"string\",\n  \"salesPersonName\": \"string\",\n  \"priceListCode\": \"string\",\n  \"contractCode\": \"string\",\n  \"minimumAmount_fx\": \"string\",\n  \"minimumLabel_fx\": \"string\",\n  \"ratingGroup\": \"string\",\n  \"electronicBilling\": true,\n  \"email\": \"string\",\n  \"termsAndConditions\": {},\n  \"discountPlansForInstantiation\": [\n    {}\n  ],\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  },\n  \"products\": [\n    {\n      \"productCode\": \"PROD_STD\",\n      \"quantity\": 1,\n      \"deliveryDate\": \"string\",\n      \"attributeInstances\": [\n        {\n          \"id\": null,\n          \"attributeCode\": null,\n          \"parentAttributeValueId\": null,\n          \"assignedAttributeValueIds\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"doubleValue\": null,\n          \"customFieldDto\": null,\n          \"booleanValue\": null,\n          \"commercialOrderId\": null,\n          \"orderAttributeCode\": null,\n          \"attributeType\": null,\n          \"orderAttributeId\": null,\n          \"orderLotCode\": null,\n          \"orderProductId\": null,\n          \"orderOfferId\": null,\n          \"accessPoint\": null,\n          \"linkedOrderAttribute\": null\n        }\n      ],\n      \"customFields\": {\n        \"customField\": [\n          null\n        ],\n        \"inheritedCustomField\": [\n          null\n        ]\n      },\n      \"chargeInstanceOverrides\": [\n        {\n          \"chargeInstanceCode\": null,\n          \"amountWithoutTax\": null,\n          \"amountWithTax\": null,\n          \"description\": null\n        }\n      ]\n    }\n  ],\n  \"activate\": false\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a subscription, CPQ-instantiate its products (applying any charge-instance overrides), and optionally activate it, all in one call. Returns 201 with the instantiated subscription."
     }
    },
    {
     "name": "Preview charge lines without persisting",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/subscriptions/preview",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "subscriptions",
        "preview"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"userAccountCode\": \"string\",\n  \"billingAccountCode\": \"string\",\n  \"sellerCode\": \"string\",\n  \"offerCode\": \"string\",\n  \"subscriptionDate\": \"string\",\n  \"products\": [\n    {\n      \"productCode\": \"PROD_STD\",\n      \"quantity\": 1,\n      \"deliveryDate\": \"string\",\n      \"attributeInstances\": [\n        {\n          \"id\": null,\n          \"attributeCode\": null,\n          \"parentAttributeValueId\": null,\n          \"assignedAttributeValueIds\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"doubleValue\": null,\n          \"customFieldDto\": null,\n          \"booleanValue\": null,\n          \"commercialOrderId\": null,\n          \"orderAttributeCode\": null,\n          \"attributeType\": null,\n          \"orderAttributeId\": null,\n          \"orderLotCode\": null,\n          \"orderProductId\": null,\n          \"orderOfferId\": null,\n          \"accessPoint\": null,\n          \"linkedOrderAttribute\": null\n        }\n      ],\n      \"customFields\": {\n        \"customField\": [\n          null\n        ],\n        \"inheritedCustomField\": [\n          null\n        ]\n      },\n      \"chargeInstanceOverrides\": [\n        {\n          \"chargeInstanceCode\": null,\n          \"amountWithoutTax\": null,\n          \"amountWithTax\": null,\n          \"description\": null\n        }\n      ]\n    }\n  ],\n  \"previewThrough\": {\n    \"type\": \"string\",\n    \"date\": \"string\",\n    \"periods\": 0\n  },\n  \"discountPlans\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Compute the charge lines for a set of products without persisting anything. Uses virtual instantiation, so price-plan evaluation does not run and amounts reflect template defaults or overrides; null amounts signal the caller to fall back to client-side pricing."
     }
    },
    {
     "name": "Get a subscription by code",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/subscriptions/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "subscriptions",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetch a subscription by code, including its resolved terms and conditions. Read-only."
     }
    },
    {
     "name": "Delete a subscription (wholesale)",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/subscriptions/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "subscriptions",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete a PENDING/INACTIVE subscription entirely. For active subscriptions use the TERMINATE action instead. Returns 204 on success."
     }
    },
    {
     "name": "Get a subscription's change history",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/subscriptions/:code/history",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "subscriptions",
        ":code",
        "history"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Return the field-level change timeline for a subscription and its offer/service/charge tree. Read-only."
     }
    },
    {
     "name": "Delete an inactive service from a subscription",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/subscriptions/:code/services/:serviceCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "subscriptions",
        ":code",
        "services",
        ":serviceCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "serviceCode",
         "value": ""
        }
       ]
      },
      "description": "Delete a single INACTIVE service instance from a subscription. Returns 204 on success."
     }
    },
    {
     "name": "Clear a charge-instance pricing override",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/subscriptions/:code/services/:serviceCode/charges/:chargeCode/override",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "subscriptions",
        ":code",
        "services",
        ":serviceCode",
        "charges",
        ":chargeCode",
        "override"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "serviceCode",
         "value": ""
        },
        {
         "key": "chargeCode",
         "value": ""
        }
       ]
      },
      "description": "Remove the pricing-model override on a specific charge instance, reverting it to the catalog price. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Account Operation Templates",
   "item": [
    {
     "name": "List account operation templates",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/accountOperationTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountOperationTemplates"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of OCC templates, filterable by code and description, ordered by sortBy/sortOrder. Read-only."
     }
    },
    {
     "name": "Create an account operation template",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/accountOperationTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountOperationTemplates"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"INV_STD\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"accountingCode\": \"string\",\n  \"occCategory\": \"DEBIT\",\n  \"journalCode\": \"string\",\n  \"contraAccountingCode\": \"string\",\n  \"contraAccountingCode2\": \"string\",\n  \"manualCreationEnabled\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new OCC template. Referenced accounting codes must already exist. A duplicate code fails. Use POST /{code} for upsert."
     }
    },
    {
     "name": "Get one account operation template",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/accountOperationTemplates/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountOperationTemplates",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single OCC template by functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update an account operation template (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/accountOperationTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountOperationTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"INV_STD\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"accountingCode\": \"string\",\n  \"occCategory\": \"DEBIT\",\n  \"journalCode\": \"string\",\n  \"contraAccountingCode\": \"string\",\n  \"contraAccountingCode2\": \"string\",\n  \"manualCreationEnabled\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the template if absent, otherwise updates it. Safe to retry."
     }
    },
    {
     "name": "Update an account operation template",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/accountOperationTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountOperationTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"INV_STD\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"accountingCode\": \"string\",\n  \"occCategory\": \"DEBIT\",\n  \"journalCode\": \"string\",\n  \"contraAccountingCode\": \"string\",\n  \"contraAccountingCode2\": \"string\",\n  \"manualCreationEnabled\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing OCC template by code. Partial-update semantics: null or absent keeps, empty clears. Must already exist."
     }
    },
    {
     "name": "Delete an account operation template",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/accountOperationTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountOperationTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the OCC template identified by code. Fails with 409 if still referenced. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Accounting Codes",
   "item": [
    {
     "name": "List accounting codes",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/accountingCodes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountingCodes"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of accounting codes, filterable by code and description, ordered by sortBy/sortOrder. Read-only."
     }
    },
    {
     "name": "Create an accounting code",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/accountingCodes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountingCodes"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"411000\",\n  \"description\": \"string\",\n  \"disabled\": true,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"parentAccountingCode\": \"string\",\n  \"chartOfAccountType\": \"ASSETS\",\n  \"chartOfAccountViewType\": \"VIEW\",\n  \"reportingAccount\": \"string\",\n  \"notes\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new accounting code. A duplicate code returns 409. Use POST /{code} for upsert."
     }
    },
    {
     "name": "Get one accounting code",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/accountingCodes/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountingCodes",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single accounting code by functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update an accounting code (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/accountingCodes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountingCodes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"411000\",\n  \"description\": \"string\",\n  \"disabled\": true,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"parentAccountingCode\": \"string\",\n  \"chartOfAccountType\": \"ASSETS\",\n  \"chartOfAccountViewType\": \"VIEW\",\n  \"reportingAccount\": \"string\",\n  \"notes\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the accounting code if absent, otherwise updates it. Safe to retry."
     }
    },
    {
     "name": "Update an accounting code",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/accountingCodes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountingCodes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"411000\",\n  \"description\": \"string\",\n  \"disabled\": true,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"parentAccountingCode\": \"string\",\n  \"chartOfAccountType\": \"ASSETS\",\n  \"chartOfAccountViewType\": \"VIEW\",\n  \"reportingAccount\": \"string\",\n  \"notes\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing accounting code by code. Partial-update semantics: null or absent keeps, empty clears. Must already exist."
     }
    },
    {
     "name": "Delete an accounting code",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/accountingCodes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountingCodes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the accounting code identified by code. Fails with 409 if still referenced. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Billing Cycles",
   "item": [
    {
     "name": "List billing cycles",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingCycles",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingCycles"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of billing cycles, filterable by code and description, ordered by sortBy/sortOrder. Read-only."
     }
    },
    {
     "name": "Create a billing cycle",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingCycles",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingCycles"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MONTHLY\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"calendar\": \"MONTHLY_CAL\",\n  \"invoiceDateDelayEl\": \"string\",\n  \"type\": \"BILLINGACCOUNT\",\n  \"invoiceTypeCode\": \"string\",\n  \"invoiceTypeEl\": \"string\",\n  \"invoicingThreshold\": 0,\n  \"checkThreshold\": \"BEFORE_DISCOUNT\",\n  \"referenceDate\": \"TODAY\",\n  \"scriptInstanceCode\": \"string\",\n  \"splitPerPaymentMethod\": true,\n  \"customFields\": {},\n  \"dueDateDelayEl\": \"string\",\n  \"lastTransactionDateDelayEl\": \"string\",\n  \"invoiceDateProductionDelayEl\": \"string\",\n  \"billingTemplateNameEl\": \"string\",\n  \"thresholdPerEntity\": true,\n  \"priority\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new billing cycle. The referenced calendar (and invoice type, when set) must already exist. Use POST /{code} for upsert."
     }
    },
    {
     "name": "Get one billing cycle",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingCycles/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingCycles",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single billing cycle by functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update a billing cycle (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingCycles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingCycles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MONTHLY\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"calendar\": \"MONTHLY_CAL\",\n  \"invoiceDateDelayEl\": \"string\",\n  \"type\": \"BILLINGACCOUNT\",\n  \"invoiceTypeCode\": \"string\",\n  \"invoiceTypeEl\": \"string\",\n  \"invoicingThreshold\": 0,\n  \"checkThreshold\": \"BEFORE_DISCOUNT\",\n  \"referenceDate\": \"TODAY\",\n  \"scriptInstanceCode\": \"string\",\n  \"splitPerPaymentMethod\": true,\n  \"customFields\": {},\n  \"dueDateDelayEl\": \"string\",\n  \"lastTransactionDateDelayEl\": \"string\",\n  \"invoiceDateProductionDelayEl\": \"string\",\n  \"billingTemplateNameEl\": \"string\",\n  \"thresholdPerEntity\": true,\n  \"priority\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the cycle if absent, otherwise updates it. Safe to retry."
     }
    },
    {
     "name": "Update a billing cycle",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingCycles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingCycles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MONTHLY\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"calendar\": \"MONTHLY_CAL\",\n  \"invoiceDateDelayEl\": \"string\",\n  \"type\": \"BILLINGACCOUNT\",\n  \"invoiceTypeCode\": \"string\",\n  \"invoiceTypeEl\": \"string\",\n  \"invoicingThreshold\": 0,\n  \"checkThreshold\": \"BEFORE_DISCOUNT\",\n  \"referenceDate\": \"TODAY\",\n  \"scriptInstanceCode\": \"string\",\n  \"splitPerPaymentMethod\": true,\n  \"customFields\": {},\n  \"dueDateDelayEl\": \"string\",\n  \"lastTransactionDateDelayEl\": \"string\",\n  \"invoiceDateProductionDelayEl\": \"string\",\n  \"billingTemplateNameEl\": \"string\",\n  \"thresholdPerEntity\": true,\n  \"priority\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing cycle by code. Partial-update semantics: null or absent keeps, empty clears. Must already exist."
     }
    },
    {
     "name": "Delete a billing cycle",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingCycles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingCycles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the cycle identified by code. Fails with 409 if still referenced by accounts or runs. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Invoice Sequences",
   "item": [
    {
     "name": "List invoice sequences",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSequences",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSequences"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of invoice sequences, filterable by code and description, ordered by sortBy/sortOrder. Read-only."
     }
    },
    {
     "name": "Create an invoice sequence",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSequences",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSequences"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"SEQ_STD\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"sequenceSize\": 9,\n  \"currentInvoiceNb\": 0,\n  \"sequencePattern\": \"string\",\n  \"sequenceType\": \"RUM\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new invoice sequence. A duplicate code fails. Use POST /{code} for upsert."
     }
    },
    {
     "name": "Get one invoice sequence",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSequences/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSequences",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single invoice sequence by functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update an invoice sequence (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSequences/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSequences",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"SEQ_STD\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"sequenceSize\": 9,\n  \"currentInvoiceNb\": 0,\n  \"sequencePattern\": \"string\",\n  \"sequenceType\": \"RUM\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the sequence if absent, otherwise updates it. Safe to retry."
     }
    },
    {
     "name": "Update an invoice sequence",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSequences/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSequences",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"SEQ_STD\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"sequenceSize\": 9,\n  \"currentInvoiceNb\": 0,\n  \"sequencePattern\": \"string\",\n  \"sequenceType\": \"RUM\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing sequence by code. Partial-update semantics: null or absent keeps, empty clears. Must already exist."
     }
    },
    {
     "name": "Delete an invoice sequence",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSequences/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSequences",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the sequence identified by code. Fails with 409 if still referenced by an invoice type. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Invoice Types",
   "item": [
    {
     "name": "List invoice types",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceTypes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceTypes"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of invoice types, filterable by code and description, ordered by sortBy/sortOrder. Read-only."
     }
    },
    {
     "name": "Create an invoice type",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceTypes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceTypes"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"COMMERCIAL\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"occTemplateCode\": \"string\",\n  \"occTemplateNegativeCode\": \"string\",\n  \"sequence\": {\n    \"prefixEl\": \"string\",\n    \"invoiceSequenceCode\": \"string\"\n  },\n  \"sellerSequences\": {},\n  \"appliesTo\": [\n    \"string\"\n  ],\n  \"matchingAuto\": true,\n  \"useSelfSequence\": true,\n  \"pdfFilenameEl\": \"string\",\n  \"xmlFilenameEl\": \"string\",\n  \"billingTemplateNameEl\": \"string\",\n  \"emailTemplateCode\": \"string\",\n  \"excludeFromAgedTrialBalance\": true,\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new invoice type. The referenced OCC template and invoice sequence must already exist. Use POST /{code} for upsert."
     }
    },
    {
     "name": "Get one invoice type",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceTypes/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceTypes",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single invoice type by functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update an invoice type (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceTypes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceTypes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"COMMERCIAL\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"occTemplateCode\": \"string\",\n  \"occTemplateNegativeCode\": \"string\",\n  \"sequence\": {\n    \"prefixEl\": \"string\",\n    \"invoiceSequenceCode\": \"string\"\n  },\n  \"sellerSequences\": {},\n  \"appliesTo\": [\n    \"string\"\n  ],\n  \"matchingAuto\": true,\n  \"useSelfSequence\": true,\n  \"pdfFilenameEl\": \"string\",\n  \"xmlFilenameEl\": \"string\",\n  \"billingTemplateNameEl\": \"string\",\n  \"emailTemplateCode\": \"string\",\n  \"excludeFromAgedTrialBalance\": true,\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the invoice type if absent, otherwise updates it. Safe to retry."
     }
    },
    {
     "name": "Update an invoice type",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceTypes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceTypes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"COMMERCIAL\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"occTemplateCode\": \"string\",\n  \"occTemplateNegativeCode\": \"string\",\n  \"sequence\": {\n    \"prefixEl\": \"string\",\n    \"invoiceSequenceCode\": \"string\"\n  },\n  \"sellerSequences\": {},\n  \"appliesTo\": [\n    \"string\"\n  ],\n  \"matchingAuto\": true,\n  \"useSelfSequence\": true,\n  \"pdfFilenameEl\": \"string\",\n  \"xmlFilenameEl\": \"string\",\n  \"billingTemplateNameEl\": \"string\",\n  \"emailTemplateCode\": \"string\",\n  \"excludeFromAgedTrialBalance\": true,\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing invoice type by code. Partial-update semantics: null or absent keeps, empty clears. Must already exist."
     }
    },
    {
     "name": "Delete an invoice type",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceTypes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceTypes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the invoice type identified by code. Fails with 409 if still referenced. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Tax Categories",
   "item": [
    {
     "name": "List tax categories",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/taxCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxCategories"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of tax categories, filterable by code and description, ordered by sortBy/sortOrder. Read-only."
     }
    },
    {
     "name": "Create a tax category",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/taxCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxCategories"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"NORMAL\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"untdidTaxationCategoryCode\": \"string\",\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new tax category. A duplicate code fails. Use POST /{code} for upsert."
     }
    },
    {
     "name": "Get one tax category",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/taxCategories/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxCategories",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single tax category by functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update a tax category (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/taxCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"NORMAL\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"untdidTaxationCategoryCode\": \"string\",\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the tax category if absent, otherwise updates it. Safe to retry."
     }
    },
    {
     "name": "Update a tax category",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/taxCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"NORMAL\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"untdidTaxationCategoryCode\": \"string\",\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing tax category by code. Partial-update semantics: null or absent keeps, empty clears. Must already exist."
     }
    },
    {
     "name": "Delete a tax category",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/taxCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the tax category identified by code. Fails with 409 if still referenced. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Billing Templates",
   "item": [
    {
     "name": "List billing templates",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingTemplates"
       ],
       "query": [
        {
         "key": "includeBindings",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Walk the tenant's jasper/ directory and query billing_invoice_template; cross-reference invoice type and seller bindings when includeBindings is true. Read-only."
     }
    },
    {
     "name": "Upload + compile a billing template bundle",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingTemplates"
       ],
       "query": [
        {
         "key": "overwrite",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Multipart form: templateName + description + supportedInvoiceTypes[] + supportedLocales[] + mainJrxml (REQUIRED) + subreports[] + subreportNames[] + assets[] + assetNames[]. The mainJrxml is compiled to .jasper at upload time; on compile failure returns 400 with the JR error. Pass ?overwrite=true to replace an existing template."
     }
    },
    {
     "name": "Get a billing template's metadata and bindings",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingTemplates/:name",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingTemplates",
        ":name"
       ],
       "variable": [
        {
         "key": "name",
         "value": ""
        }
       ]
      },
      "description": "Fetch one template's metadata plus its read-only binding cross-references. Read-only."
     }
    },
    {
     "name": "Delete a billing template",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingTemplates/:name",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingTemplates",
        ":name"
       ],
       "query": [
        {
         "key": "force",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "name",
         "value": ""
        }
       ]
      },
      "description": "Removes both the {chrootDir}/jasper/{name}/ directory and the billing_invoice_template DB row. Refuses to delete 'default' or 'adj' (built-in fallbacks). Returns 409 if any Seller / InvoiceType is currently bound."
     }
    },
    {
     "name": "Render a preview PDF using this template against an existing invoice",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/billingTemplates/:name/preview",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingTemplates",
        ":name",
        "preview"
       ],
       "variable": [
        {
         "key": "name",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"invoiceCode\": \"INV-2026-000123\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Returns the rendered PDF binary. Bypasses the resolved-template chain (Seller / InvoiceType / BillingCycle); always uses the named template for this single render. Does NOT update the invoice's persisted PDF."
     }
    },
    {
     "name": "Read a single file from a billing template directory",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingTemplates/:name/source",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingTemplates",
        ":name",
        "source"
       ],
       "query": [
        {
         "key": "file",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "name",
         "value": ""
        }
       ]
      },
      "description": "Returns the raw bytes of a file under {chrootDir}/jasper/{name}/. Defaults to the template's main jrxml when ?file= is omitted. Used by the admin UI's editor to load .jrxml content without unzipping client-side."
     }
    },
    {
     "name": "Download a billing template directory as a zip",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingTemplates/:name/zip",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "billingTemplates",
        ":name",
        "zip"
       ],
       "variable": [
        {
         "key": "name",
         "value": ""
        }
       ]
      },
      "description": "Streams the entire {chrootDir}/jasper/{name}/ directory as a zip — useful for export, backup, and re-upload to another tenant."
     }
    }
   ]
  },
  {
   "name": "Articles",
   "item": [
    {
     "name": "List articles",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/articles",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        },
        {
         "key": "q",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of accounting articles. code and description filters are exact-match; q is a scoped picker filter."
     }
    },
    {
     "name": "Create article",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/articles",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ART_STD\",\n  \"description\": \"string\",\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"accountingCode\": \"string\",\n  \"invoiceType\": \"string\",\n  \"unitPrice\": 9.99,\n  \"physical\": false,\n  \"ignoreAggregation\": false,\n  \"invoiceType_fx\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"allowanceCode\": \"string\",\n  \"mappingLines\": [\n    {\n      \"description\": \"string\",\n      \"offerTemplate\": \"string\",\n      \"product\": \"string\",\n      \"charge\": \"string\",\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"matchingFormula_fx\": \"string\",\n      \"attributeOperator\": \"AND\"\n    }\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new article. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get article",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/articles/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single article by its code or numeric technical id, including its mapping lines and custom fields."
     }
    },
    {
     "name": "Create or update article (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/articles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ART_STD\",\n  \"description\": \"string\",\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"accountingCode\": \"string\",\n  \"invoiceType\": \"string\",\n  \"unitPrice\": 9.99,\n  \"physical\": false,\n  \"ignoreAggregation\": false,\n  \"invoiceType_fx\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"allowanceCode\": \"string\",\n  \"mappingLines\": [\n    {\n      \"description\": \"string\",\n      \"offerTemplate\": \"string\",\n      \"product\": \"string\",\n      \"charge\": \"string\",\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"matchingFormula_fx\": \"string\",\n      \"attributeOperator\": \"AND\"\n    }\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the article if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update article",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/articles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ART_STD\",\n  \"description\": \"string\",\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"accountingCode\": \"string\",\n  \"invoiceType\": \"string\",\n  \"unitPrice\": 9.99,\n  \"physical\": false,\n  \"ignoreAggregation\": false,\n  \"invoiceType_fx\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"allowanceCode\": \"string\",\n  \"mappingLines\": [\n    {\n      \"description\": \"string\",\n      \"offerTemplate\": \"string\",\n      \"product\": \"string\",\n      \"charge\": \"string\",\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"matchingFormula_fx\": \"string\",\n      \"attributeOperator\": \"AND\"\n    }\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing article. Partial-update semantics: a null field keeps the stored value, an empty string or empty array clears it."
     }
    },
    {
     "name": "Delete article",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/articles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the article identified by the code."
     }
    },
    {
     "name": "List article mapping lines",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/articles/:code/mappingLines",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles",
        ":code",
        "mappingLines"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns the mapping lines that select this article for offer/product/charge combinations."
     }
    },
    {
     "name": "Create article mapping line",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/articles/:code/mappingLines",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles",
        ":code",
        "mappingLines"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"description\": \"string\",\n  \"offerTemplate\": \"string\",\n  \"product\": \"string\",\n  \"charge\": \"string\",\n  \"parameter1\": \"string\",\n  \"parameter2\": \"string\",\n  \"parameter3\": \"string\",\n  \"matchingFormula_fx\": \"string\",\n  \"attributeOperator\": \"AND\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Adds a mapping line to the article. Returns 201 with the created line."
     }
    },
    {
     "name": "Update article mapping line",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/articles/:code/mappingLines/:lineId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles",
        ":code",
        "mappingLines",
        ":lineId"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "lineId",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"description\": \"string\",\n  \"offerTemplate\": \"string\",\n  \"product\": \"string\",\n  \"charge\": \"string\",\n  \"parameter1\": \"string\",\n  \"parameter2\": \"string\",\n  \"parameter3\": \"string\",\n  \"matchingFormula_fx\": \"string\",\n  \"attributeOperator\": \"AND\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates a mapping line by its id within the article."
     }
    },
    {
     "name": "Delete article mapping line",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/articles/:code/mappingLines/:lineId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "articles",
        ":code",
        "mappingLines",
        ":lineId"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "lineId",
         "value": ""
        }
       ]
      },
      "description": "Removes a mapping line by its id within the article."
     }
    }
   ]
  },
  {
   "name": "Attributes",
   "item": [
    {
     "name": "List attributes",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/attributes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "attributes"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        },
        {
         "key": "q",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of attributes. The code and description filters are exact-match; q is a scoped helper filter for the picker."
     }
    },
    {
     "name": "Create attribute",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/attributes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "attributes"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"DATA_VOLUME\",\n  \"description\": \"string\",\n  \"attributeType\": \"NUMERIC\",\n  \"attributeCategory\": \"REGULAR\",\n  \"disabled\": false,\n  \"allowedValues\": [\n    \"string\"\n  ],\n  \"unitNbDecimal\": 2,\n  \"elValue\": \"string\",\n  \"priority\": 1,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new attribute. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get attribute",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/attributes/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "attributes",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single attribute by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update attribute (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/attributes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "attributes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"DATA_VOLUME\",\n  \"description\": \"string\",\n  \"attributeType\": \"NUMERIC\",\n  \"attributeCategory\": \"REGULAR\",\n  \"disabled\": false,\n  \"allowedValues\": [\n    \"string\"\n  ],\n  \"unitNbDecimal\": 2,\n  \"elValue\": \"string\",\n  \"priority\": 1,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the attribute if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update attribute",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/attributes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "attributes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"DATA_VOLUME\",\n  \"description\": \"string\",\n  \"attributeType\": \"NUMERIC\",\n  \"attributeCategory\": \"REGULAR\",\n  \"disabled\": false,\n  \"allowedValues\": [\n    \"string\"\n  ],\n  \"unitNbDecimal\": 2,\n  \"elValue\": \"string\",\n  \"priority\": 1,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing attribute. Partial-update semantics: a null field keeps the stored value, an empty string or empty array clears it."
     }
    },
    {
     "name": "Delete attribute",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/attributes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "attributes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the attribute identified by the code. Fails if it is still assigned to products or offers."
     }
    }
   ]
  },
  {
   "name": "Offer Models",
   "item": [
    {
     "name": "List offer models",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerModels",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerModels"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of offer models. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create offer model",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerModels",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerModels"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"BOM_BASE\",\n  \"description\": \"string\",\n  \"offerTemplateCode\": \"string\",\n  \"serviceModelCodes\": [\n    \"string\"\n  ],\n  \"productModelCodes\": [\n    \"string\"\n  ],\n  \"disabled\": false,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new offer model. Returns 201."
     }
    },
    {
     "name": "Get offer model",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerModels/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerModels",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single offer model by its code or numeric technical id."
     }
    },
    {
     "name": "Update offer model",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerModels/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerModels",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"BOM_BASE\",\n  \"description\": \"string\",\n  \"offerTemplateCode\": \"string\",\n  \"serviceModelCodes\": [\n    \"string\"\n  ],\n  \"productModelCodes\": [\n    \"string\"\n  ],\n  \"disabled\": false,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing offer model. Partial-update semantics: a null field keeps the stored value."
     }
    },
    {
     "name": "Delete offer model",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerModels/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerModels",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the offer model identified by the code."
     }
    },
    {
     "name": "Instantiate offer from model",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerModels/:code/instantiate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerModels",
        ":code",
        "instantiate"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"offerCode\": \"OFFER_NEW\",\n  \"offerName\": \"string\",\n  \"description\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"status\": \"string\",\n  \"servicesToActivate\": [\n    {\n      \"service\": \"string\",\n      \"quantity\": 1\n    }\n  ],\n  \"productsToActivate\": [\n    {\n      \"product\": \"string\"\n    }\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a concrete offer template from the model, pre-populated with the requested services, products, and custom fields. Returns 201 with the created offer code."
     }
    }
   ]
  },
  {
   "name": "Brands",
   "item": [
    {
     "name": "List brands",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/brands",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "brands"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of brands. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create brand",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/brands",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "brands"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"PREMIUM\",\n  \"description\": \"Premium Brand\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new brand. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get brand",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/brands/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "brands",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single brand by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update brand (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/brands/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "brands",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"PREMIUM\",\n  \"description\": \"Premium Brand\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the brand code in the path. Creates the brand if absent, otherwise updates it. Returns 200 with the resulting brand."
     }
    },
    {
     "name": "Update brand",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/brands/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "brands",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"PREMIUM\",\n  \"description\": \"Premium Brand\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing brand. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete brand",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/brands/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "brands",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the brand identified by the code."
     }
    }
   ]
  },
  {
   "name": "Bundle Templates",
   "item": [
    {
     "name": "List bundle templates",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/bundleTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bundleTemplates"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of bundle templates. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create bundle template",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/bundleTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bundleTemplates"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"BUNDLE_STARTER\",\n  \"description\": \"string\",\n  \"name\": \"Starter bundle\",\n  \"active\": true,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new bundle template. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get bundle template",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/bundleTemplates/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bundleTemplates",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single bundle template by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update bundle template (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/bundleTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bundleTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"BUNDLE_STARTER\",\n  \"description\": \"string\",\n  \"name\": \"Starter bundle\",\n  \"active\": true,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the bundle template if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update bundle template",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/bundleTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bundleTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"BUNDLE_STARTER\",\n  \"description\": \"string\",\n  \"name\": \"Starter bundle\",\n  \"active\": true,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing bundle template. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete bundle template",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/bundleTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bundleTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the bundle template identified by the code."
     }
    }
   ]
  },
  {
   "name": "Calendars",
   "item": [
    {
     "name": "List calendars",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/calendars",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "calendars"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of calendars. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create calendar",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/calendars",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "calendars"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MONTHLY\",\n  \"description\": \"string\",\n  \"calendarType\": \"PERIOD\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new calendar. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get calendar",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/calendars/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "calendars",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single calendar by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update calendar (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/calendars/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "calendars",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MONTHLY\",\n  \"description\": \"string\",\n  \"calendarType\": \"PERIOD\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the calendar if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update calendar",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/calendars/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "calendars",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MONTHLY\",\n  \"description\": \"string\",\n  \"calendarType\": \"PERIOD\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing calendar. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete calendar",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/calendars/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "calendars",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the calendar identified by the code. Fails if it is still referenced by charges or counters."
     }
    }
   ]
  },
  {
   "name": "Catalog Import",
   "item": [
    {
     "name": "Import a catalog from YAML",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/catalog/import",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "catalog",
        "import"
       ]
      },
      "description": "Parses the YAML body and creates the described catalog entities in one pass. Returns a result document listing what was created and any per-entity errors. Status is 201 on full success, 207 on partial success, 400 on invalid input, and 500 on an unexpected error."
     }
    }
   ]
  },
  {
   "name": "Channels",
   "item": [
    {
     "name": "List channels",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/channels",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "channels"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of channels. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create channel",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/channels",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "channels"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"WEB\",\n  \"description\": \"Web channel\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new channel. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get channel",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/channels/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "channels",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single channel by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update channel (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/channels/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "channels",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"WEB\",\n  \"description\": \"Web channel\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the channel if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update channel",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/channels/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "channels",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"WEB\",\n  \"description\": \"Web channel\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing channel. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete channel",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/channels/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "channels",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the channel identified by the code."
     }
    }
   ]
  },
  {
   "name": "Charges",
   "item": [
    {
     "name": "List all charge templates",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "type",
         "value": "",
         "disabled": true
        },
        {
         "key": "status",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        },
        {
         "key": "q",
         "value": "",
         "disabled": true
        }
       ]
      }
     }
    },
    {
     "name": "Create a charge template (collection) with optional inline pricing + status",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/charges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Get charge template with pricing versions",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Create or update charge template (upsert by code)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Update an existing charge template (charge fields only; pricing via /pricingVersions)",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Delete a charge template when it has no references",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Activate a charge (DRAFT to ACTIVE; requires a PUBLISHED pricing version or a rating script)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/activate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "activate"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "List accounting articles mapped to a charge",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/articles",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "articles"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Link an Attribute to a charge (idempotent)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/attributes/:attributeCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "attributes",
        ":attributeCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "attributeCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Unlink an Attribute from a charge (idempotent)",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/attributes/:attributeCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "attributes",
        ":attributeCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "attributeCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Live price + working draft + schedule + gaps for a charge",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/pricing",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "pricing"
       ],
       "query": [
        {
         "key": "asOf",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Sunset the live price at a date",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/pricing/close",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "pricing",
        "close"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Create or update the charge's single pricing draft",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/pricing/draft",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "pricing",
        "draft"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"label\": \"string\",\n  \"pricingModel\": \"string\",\n  \"status\": \"string\",\n  \"price\": 0,\n  \"price_fx\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"currency\": \"string\",\n  \"priority\": 0,\n  \"seller\": \"string\",\n  \"country\": \"string\",\n  \"tiers\": [\n    {\n      \"from\": 0,\n      \"to\": 0,\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"packageSize\": 0,\n  \"percentage\": 0,\n  \"baseCharge\": \"string\",\n  \"columns\": [\n    {\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"type\": \"string\",\n      \"position\": 0,\n      \"attributeCode\": \"string\",\n      \"elValue\": \"string\",\n      \"isRange\": true,\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"rows\": [\n    {\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"values\": [\n        {\n          \"dimensionCode\": null,\n          \"stringValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"fromDoubleValue\": null,\n          \"toDoubleValue\": null,\n          \"fromDateValue\": null,\n          \"toDateValue\": null\n        }\n      ],\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"defaultPrice\": 0,\n  \"ratingScript\": \"string\",\n  \"supersede\": true,\n  \"currencyPrices\": [\n    {\n      \"currency\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"parameter_extra_fx\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Discard the charge's pricing draft",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/pricing/draft",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "pricing",
        "draft"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Publish the charge's pricing draft (auto-closes the predecessor)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/pricing/publish",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "pricing",
        "publish"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Create pricing version for charge",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/pricingVersions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "pricingVersions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"label\": \"string\",\n  \"pricingModel\": \"string\",\n  \"status\": \"string\",\n  \"price\": 0,\n  \"price_fx\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"currency\": \"string\",\n  \"priority\": 0,\n  \"seller\": \"string\",\n  \"country\": \"string\",\n  \"tiers\": [\n    {\n      \"from\": 0,\n      \"to\": 0,\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"packageSize\": 0,\n  \"percentage\": 0,\n  \"baseCharge\": \"string\",\n  \"columns\": [\n    {\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"type\": \"string\",\n      \"position\": 0,\n      \"attributeCode\": \"string\",\n      \"elValue\": \"string\",\n      \"isRange\": true,\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"rows\": [\n    {\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"values\": [\n        {\n          \"dimensionCode\": null,\n          \"stringValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"fromDoubleValue\": null,\n          \"toDoubleValue\": null,\n          \"fromDateValue\": null,\n          \"toDateValue\": null\n        }\n      ],\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"defaultPrice\": 0,\n  \"ratingScript\": \"string\",\n  \"supersede\": true,\n  \"currencyPrices\": [\n    {\n      \"currency\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"parameter_extra_fx\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Update DRAFT pricing version",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/pricingVersions/:ver",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "pricingVersions",
        ":ver"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"label\": \"string\",\n  \"pricingModel\": \"string\",\n  \"status\": \"string\",\n  \"price\": 0,\n  \"price_fx\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"currency\": \"string\",\n  \"priority\": 0,\n  \"seller\": \"string\",\n  \"country\": \"string\",\n  \"tiers\": [\n    {\n      \"from\": 0,\n      \"to\": 0,\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"packageSize\": 0,\n  \"percentage\": 0,\n  \"baseCharge\": \"string\",\n  \"columns\": [\n    {\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"type\": \"string\",\n      \"position\": 0,\n      \"attributeCode\": \"string\",\n      \"elValue\": \"string\",\n      \"isRange\": true,\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"rows\": [\n    {\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"values\": [\n        {\n          \"dimensionCode\": null,\n          \"stringValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"fromDoubleValue\": null,\n          \"toDoubleValue\": null,\n          \"fromDateValue\": null,\n          \"toDateValue\": null\n        }\n      ],\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"defaultPrice\": 0,\n  \"ratingScript\": \"string\",\n  \"supersede\": true,\n  \"currencyPrices\": [\n    {\n      \"currency\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"parameter_extra_fx\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Delete DRAFT pricing version",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/pricingVersions/:ver",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "pricingVersions",
        ":ver"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Publish pricing version",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/charges/:code/pricingVersions/:ver/publish",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "charges",
        ":code",
        "pricingVersions",
        ":ver",
        "publish"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      }
     }
    }
   ]
  },
  {
   "name": "One-Shot Charges",
   "item": [
    {
     "name": "List one-shot charges",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "status",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of one-shot charge templates. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create one-shot charge",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new one-shot charge template with optional inline pricing and status. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get one-shot charge",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single one-shot charge template with its pricing versions, by code or numeric technical id."
     }
    },
    {
     "name": "Create or update one-shot charge (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the charge if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update one-shot charge",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates the charge fields of an existing one-shot charge (pricing is managed via /pricingVersions). Partial-update semantics: a null field keeps the stored value."
     }
    },
    {
     "name": "Delete one-shot charge",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the one-shot charge template when it has no references."
     }
    },
    {
     "name": "Create pricing version",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges/:code/pricingVersions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges",
        ":code",
        "pricingVersions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"label\": \"string\",\n  \"pricingModel\": \"string\",\n  \"status\": \"string\",\n  \"price\": 0,\n  \"price_fx\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"currency\": \"string\",\n  \"priority\": 0,\n  \"seller\": \"string\",\n  \"country\": \"string\",\n  \"tiers\": [\n    {\n      \"from\": 0,\n      \"to\": 0,\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"packageSize\": 0,\n  \"percentage\": 0,\n  \"baseCharge\": \"string\",\n  \"columns\": [\n    {\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"type\": \"string\",\n      \"position\": 0,\n      \"attributeCode\": \"string\",\n      \"elValue\": \"string\",\n      \"isRange\": true,\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"rows\": [\n    {\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"values\": [\n        {\n          \"dimensionCode\": null,\n          \"stringValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"fromDoubleValue\": null,\n          \"toDoubleValue\": null,\n          \"fromDateValue\": null,\n          \"toDateValue\": null\n        }\n      ],\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"defaultPrice\": 0,\n  \"ratingScript\": \"string\",\n  \"supersede\": true,\n  \"currencyPrices\": [\n    {\n      \"currency\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"parameter_extra_fx\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new pricing version (in DRAFT) for the charge."
     }
    },
    {
     "name": "Update DRAFT pricing version",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges/:code/pricingVersions/:ver",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges",
        ":code",
        "pricingVersions",
        ":ver"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"label\": \"string\",\n  \"pricingModel\": \"string\",\n  \"status\": \"string\",\n  \"price\": 0,\n  \"price_fx\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"currency\": \"string\",\n  \"priority\": 0,\n  \"seller\": \"string\",\n  \"country\": \"string\",\n  \"tiers\": [\n    {\n      \"from\": 0,\n      \"to\": 0,\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"packageSize\": 0,\n  \"percentage\": 0,\n  \"baseCharge\": \"string\",\n  \"columns\": [\n    {\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"type\": \"string\",\n      \"position\": 0,\n      \"attributeCode\": \"string\",\n      \"elValue\": \"string\",\n      \"isRange\": true,\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"rows\": [\n    {\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"values\": [\n        {\n          \"dimensionCode\": null,\n          \"stringValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"fromDoubleValue\": null,\n          \"toDoubleValue\": null,\n          \"fromDateValue\": null,\n          \"toDateValue\": null\n        }\n      ],\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"defaultPrice\": 0,\n  \"ratingScript\": \"string\",\n  \"supersede\": true,\n  \"currencyPrices\": [\n    {\n      \"currency\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"parameter_extra_fx\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates a DRAFT pricing version. Published versions are immutable."
     }
    },
    {
     "name": "Delete pricing version",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges/:code/pricingVersions/:ver",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges",
        ":code",
        "pricingVersions",
        ":ver"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "description": "Removes a pricing version from the charge."
     }
    },
    {
     "name": "Publish pricing version",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/oneShotCharges/:code/pricingVersions/:ver/publish",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "oneShotCharges",
        ":code",
        "pricingVersions",
        ":ver",
        "publish"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "description": "Publishes a DRAFT pricing version. Fails with 409 when its effectivity overlaps another published version."
     }
    }
   ]
  },
  {
   "name": "Recurring Charges",
   "item": [
    {
     "name": "List recurring charges",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "status",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of recurring charge templates. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create recurring charge",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new recurring charge template with optional inline pricing and status. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get recurring charge",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single recurring charge template with its pricing versions, by code or numeric technical id."
     }
    },
    {
     "name": "Create or update recurring charge (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the charge if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update recurring charge",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates the charge fields of an existing recurring charge (pricing is managed via /pricingVersions). Partial-update semantics: a null field keeps the stored value."
     }
    },
    {
     "name": "Delete recurring charge",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the recurring charge template when it has no references."
     }
    },
    {
     "name": "Create pricing version",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges/:code/pricingVersions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges",
        ":code",
        "pricingVersions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"label\": \"string\",\n  \"pricingModel\": \"string\",\n  \"status\": \"string\",\n  \"price\": 0,\n  \"price_fx\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"currency\": \"string\",\n  \"priority\": 0,\n  \"seller\": \"string\",\n  \"country\": \"string\",\n  \"tiers\": [\n    {\n      \"from\": 0,\n      \"to\": 0,\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"packageSize\": 0,\n  \"percentage\": 0,\n  \"baseCharge\": \"string\",\n  \"columns\": [\n    {\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"type\": \"string\",\n      \"position\": 0,\n      \"attributeCode\": \"string\",\n      \"elValue\": \"string\",\n      \"isRange\": true,\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"rows\": [\n    {\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"values\": [\n        {\n          \"dimensionCode\": null,\n          \"stringValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"fromDoubleValue\": null,\n          \"toDoubleValue\": null,\n          \"fromDateValue\": null,\n          \"toDateValue\": null\n        }\n      ],\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"defaultPrice\": 0,\n  \"ratingScript\": \"string\",\n  \"supersede\": true,\n  \"currencyPrices\": [\n    {\n      \"currency\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"parameter_extra_fx\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new pricing version (in DRAFT) for the charge."
     }
    },
    {
     "name": "Update DRAFT pricing version",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges/:code/pricingVersions/:ver",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges",
        ":code",
        "pricingVersions",
        ":ver"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"label\": \"string\",\n  \"pricingModel\": \"string\",\n  \"status\": \"string\",\n  \"price\": 0,\n  \"price_fx\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"currency\": \"string\",\n  \"priority\": 0,\n  \"seller\": \"string\",\n  \"country\": \"string\",\n  \"tiers\": [\n    {\n      \"from\": 0,\n      \"to\": 0,\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"packageSize\": 0,\n  \"percentage\": 0,\n  \"baseCharge\": \"string\",\n  \"columns\": [\n    {\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"type\": \"string\",\n      \"position\": 0,\n      \"attributeCode\": \"string\",\n      \"elValue\": \"string\",\n      \"isRange\": true,\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"rows\": [\n    {\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"values\": [\n        {\n          \"dimensionCode\": null,\n          \"stringValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"fromDoubleValue\": null,\n          \"toDoubleValue\": null,\n          \"fromDateValue\": null,\n          \"toDateValue\": null\n        }\n      ],\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"defaultPrice\": 0,\n  \"ratingScript\": \"string\",\n  \"supersede\": true,\n  \"currencyPrices\": [\n    {\n      \"currency\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"parameter_extra_fx\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates a DRAFT pricing version. Published versions are immutable."
     }
    },
    {
     "name": "Delete pricing version",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges/:code/pricingVersions/:ver",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges",
        ":code",
        "pricingVersions",
        ":ver"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "description": "Removes a pricing version from the charge."
     }
    },
    {
     "name": "Publish pricing version",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/recurringCharges/:code/pricingVersions/:ver/publish",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "recurringCharges",
        ":code",
        "pricingVersions",
        ":ver",
        "publish"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "description": "Publishes a DRAFT pricing version. Fails with 409 when its effectivity overlaps another published version."
     }
    }
   ]
  },
  {
   "name": "Usage Charges",
   "item": [
    {
     "name": "List usage charges",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "status",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of usage charge templates. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create usage charge",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new usage charge template with optional inline pricing and status. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get usage charge",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single usage charge template with its pricing versions, by code or numeric technical id."
     }
    },
    {
     "name": "Create or update usage charge (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the charge if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update usage charge",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates the charge fields of an existing usage charge (pricing is managed via /pricingVersions). Partial-update semantics: a null field keeps the stored value."
     }
    },
    {
     "name": "Delete usage charge",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the usage charge template when it has no references."
     }
    },
    {
     "name": "Create pricing version",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges/:code/pricingVersions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges",
        ":code",
        "pricingVersions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"label\": \"string\",\n  \"pricingModel\": \"string\",\n  \"status\": \"string\",\n  \"price\": 0,\n  \"price_fx\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"currency\": \"string\",\n  \"priority\": 0,\n  \"seller\": \"string\",\n  \"country\": \"string\",\n  \"tiers\": [\n    {\n      \"from\": 0,\n      \"to\": 0,\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"packageSize\": 0,\n  \"percentage\": 0,\n  \"baseCharge\": \"string\",\n  \"columns\": [\n    {\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"type\": \"string\",\n      \"position\": 0,\n      \"attributeCode\": \"string\",\n      \"elValue\": \"string\",\n      \"isRange\": true,\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"rows\": [\n    {\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"values\": [\n        {\n          \"dimensionCode\": null,\n          \"stringValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"fromDoubleValue\": null,\n          \"toDoubleValue\": null,\n          \"fromDateValue\": null,\n          \"toDateValue\": null\n        }\n      ],\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"defaultPrice\": 0,\n  \"ratingScript\": \"string\",\n  \"supersede\": true,\n  \"currencyPrices\": [\n    {\n      \"currency\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"parameter_extra_fx\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new pricing version (in DRAFT) for the charge."
     }
    },
    {
     "name": "Update DRAFT pricing version",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges/:code/pricingVersions/:ver",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges",
        ":code",
        "pricingVersions",
        ":ver"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"label\": \"string\",\n  \"pricingModel\": \"string\",\n  \"status\": \"string\",\n  \"price\": 0,\n  \"price_fx\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"currency\": \"string\",\n  \"priority\": 0,\n  \"seller\": \"string\",\n  \"country\": \"string\",\n  \"tiers\": [\n    {\n      \"from\": 0,\n      \"to\": 0,\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"packageSize\": 0,\n  \"percentage\": 0,\n  \"baseCharge\": \"string\",\n  \"columns\": [\n    {\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"type\": \"string\",\n      \"position\": 0,\n      \"attributeCode\": \"string\",\n      \"elValue\": \"string\",\n      \"isRange\": true,\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"rows\": [\n    {\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"values\": [\n        {\n          \"dimensionCode\": null,\n          \"stringValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"fromDoubleValue\": null,\n          \"toDoubleValue\": null,\n          \"fromDateValue\": null,\n          \"toDateValue\": null\n        }\n      ],\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"defaultPrice\": 0,\n  \"ratingScript\": \"string\",\n  \"supersede\": true,\n  \"currencyPrices\": [\n    {\n      \"currency\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\"\n    }\n  ],\n  \"parameter_extra_fx\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates a DRAFT pricing version. Published versions are immutable."
     }
    },
    {
     "name": "Delete pricing version",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges/:code/pricingVersions/:ver",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges",
        ":code",
        "pricingVersions",
        ":ver"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "description": "Removes a pricing version from the charge."
     }
    },
    {
     "name": "Publish pricing version",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/usageCharges/:code/pricingVersions/:ver/publish",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "usageCharges",
        ":code",
        "pricingVersions",
        ":ver",
        "publish"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "description": "Publishes a DRAFT pricing version. Fails with 409 when its effectivity overlaps another published version."
     }
    }
   ]
  },
  {
   "name": "Counter Templates",
   "item": [
    {
     "name": "List counter templates",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/counterTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "counterTemplates"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of counter templates. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create counter template",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/counterTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "counterTemplates"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"DATA_ALLOWANCE\",\n  \"description\": \"string\",\n  \"counterType\": \"USAGE\",\n  \"calendarCode\": \"MONTHLY\",\n  \"ceiling\": 100,\n  \"accumulator\": false,\n  \"accumulatorType\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new counter template. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get counter template",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/counterTemplates/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "counterTemplates",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single counter template by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update counter template (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/counterTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "counterTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"DATA_ALLOWANCE\",\n  \"description\": \"string\",\n  \"counterType\": \"USAGE\",\n  \"calendarCode\": \"MONTHLY\",\n  \"ceiling\": 100,\n  \"accumulator\": false,\n  \"accumulatorType\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the counter template if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update counter template",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/counterTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "counterTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"DATA_ALLOWANCE\",\n  \"description\": \"string\",\n  \"counterType\": \"USAGE\",\n  \"calendarCode\": \"MONTHLY\",\n  \"ceiling\": 100,\n  \"accumulator\": false,\n  \"accumulatorType\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing counter template. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete counter template",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/counterTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "counterTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the counter template identified by the code. Fails if it is still referenced by charges."
     }
    }
   ]
  },
  {
   "name": "Discount Plans",
   "item": [
    {
     "name": "List discount plans",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "status",
         "value": "",
         "disabled": true
        },
        {
         "key": "discountPlanType",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        },
        {
         "key": "q",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of discount plans, optionally filtered by code, status, and discount plan type. code and description filters are exact-match; q is a scoped picker filter. An invalid status returns 400."
     }
    },
    {
     "name": "Create discount plan",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"WELCOME10\",\n  \"description\": \"string\",\n  \"discountPlanType\": \"OFFER\",\n  \"status\": \"ACTIVE\",\n  \"startDate\": \"string\",\n  \"endDate\": \"string\",\n  \"defaultDuration\": 0,\n  \"durationUnit\": \"DAY\",\n  \"initialQuantity\": 0,\n  \"applicationLimit\": 0,\n  \"automaticApplication\": true,\n  \"applicableOnOverriddenPrice\": false,\n  \"applicableOnDiscountedPrice\": false,\n  \"applicableOnContractPrice\": false,\n  \"sequence\": 1,\n  \"incompatibleDiscountPlans\": [\n    \"string\"\n  ],\n  \"applicationFilter_fx\": \"string\",\n  \"allowanceCode\": \"string\",\n  \"items\": [\n    {\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"priority\": 0,\n      \"discountPlanItemType\": \"PERCENTAGE\",\n      \"discountValue\": 10,\n      \"discountValue_fx\": \"string\",\n      \"targetArticles\": [\n        \"string\"\n      ],\n      \"pricePlan\": \"string\",\n      \"accountingArticle\": \"string\",\n      \"allowToNegate\": false,\n      \"applyByArticle\": false,\n      \"lastDiscount\": false,\n      \"filter_fx\": \"string\",\n      \"sequence\": 0\n    }\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new discount plan with its items. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get discount plan with items",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single discount plan by its code or numeric technical id, including its items and custom fields."
     }
    },
    {
     "name": "Create or update discount plan (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"WELCOME10\",\n  \"description\": \"string\",\n  \"discountPlanType\": \"OFFER\",\n  \"status\": \"ACTIVE\",\n  \"startDate\": \"string\",\n  \"endDate\": \"string\",\n  \"defaultDuration\": 0,\n  \"durationUnit\": \"DAY\",\n  \"initialQuantity\": 0,\n  \"applicationLimit\": 0,\n  \"automaticApplication\": true,\n  \"applicableOnOverriddenPrice\": false,\n  \"applicableOnDiscountedPrice\": false,\n  \"applicableOnContractPrice\": false,\n  \"sequence\": 1,\n  \"incompatibleDiscountPlans\": [\n    \"string\"\n  ],\n  \"applicationFilter_fx\": \"string\",\n  \"allowanceCode\": \"string\",\n  \"items\": [\n    {\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"priority\": 0,\n      \"discountPlanItemType\": \"PERCENTAGE\",\n      \"discountValue\": 10,\n      \"discountValue_fx\": \"string\",\n      \"targetArticles\": [\n        \"string\"\n      ],\n      \"pricePlan\": \"string\",\n      \"accountingArticle\": \"string\",\n      \"allowToNegate\": false,\n      \"applyByArticle\": false,\n      \"lastDiscount\": false,\n      \"filter_fx\": \"string\",\n      \"sequence\": 0\n    }\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the plan if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update discount plan",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"WELCOME10\",\n  \"description\": \"string\",\n  \"discountPlanType\": \"OFFER\",\n  \"status\": \"ACTIVE\",\n  \"startDate\": \"string\",\n  \"endDate\": \"string\",\n  \"defaultDuration\": 0,\n  \"durationUnit\": \"DAY\",\n  \"initialQuantity\": 0,\n  \"applicationLimit\": 0,\n  \"automaticApplication\": true,\n  \"applicableOnOverriddenPrice\": false,\n  \"applicableOnDiscountedPrice\": false,\n  \"applicableOnContractPrice\": false,\n  \"sequence\": 1,\n  \"incompatibleDiscountPlans\": [\n    \"string\"\n  ],\n  \"applicationFilter_fx\": \"string\",\n  \"allowanceCode\": \"string\",\n  \"items\": [\n    {\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"priority\": 0,\n      \"discountPlanItemType\": \"PERCENTAGE\",\n      \"discountValue\": 10,\n      \"discountValue_fx\": \"string\",\n      \"targetArticles\": [\n        \"string\"\n      ],\n      \"pricePlan\": \"string\",\n      \"accountingArticle\": \"string\",\n      \"allowToNegate\": false,\n      \"applyByArticle\": false,\n      \"lastDiscount\": false,\n      \"filter_fx\": \"string\",\n      \"sequence\": 0\n    }\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing discount plan. Partial-update semantics: a null field keeps the stored value, an empty array clears a collection."
     }
    },
    {
     "name": "Delete discount plan",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the discount plan identified by the code. Fails if the plan is in use."
     }
    },
    {
     "name": "Activate discount plan",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans/:code/activate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans",
        ":code",
        "activate"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Moves the plan to ACTIVE. Modeled as a noun-form action sub-resource; returns the resulting plan."
     }
    },
    {
     "name": "List discount plan items",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans/:code/items",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans",
        ":code",
        "items"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns the items of the discount plan."
     }
    },
    {
     "name": "Create discount plan item",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans/:code/items",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans",
        ":code",
        "items"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"priority\": 0,\n  \"discountPlanItemType\": \"PERCENTAGE\",\n  \"discountValue\": 10,\n  \"discountValue_fx\": \"string\",\n  \"targetArticles\": [\n    \"string\"\n  ],\n  \"pricePlan\": \"string\",\n  \"accountingArticle\": \"string\",\n  \"allowToNegate\": false,\n  \"applyByArticle\": false,\n  \"lastDiscount\": false,\n  \"filter_fx\": \"string\",\n  \"sequence\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Adds an item to the discount plan. Returns 201 with the created item."
     }
    },
    {
     "name": "Update discount plan item",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans/:code/items/:itemCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans",
        ":code",
        "items",
        ":itemCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "itemCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"priority\": 0,\n  \"discountPlanItemType\": \"PERCENTAGE\",\n  \"discountValue\": 10,\n  \"discountValue_fx\": \"string\",\n  \"targetArticles\": [\n    \"string\"\n  ],\n  \"pricePlan\": \"string\",\n  \"accountingArticle\": \"string\",\n  \"allowToNegate\": false,\n  \"applyByArticle\": false,\n  \"lastDiscount\": false,\n  \"filter_fx\": \"string\",\n  \"sequence\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an item by its code within the plan. Partial-update semantics apply."
     }
    },
    {
     "name": "Delete discount plan item",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/discountPlans/:code/items/:itemCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "discountPlans",
        ":code",
        "items",
        ":itemCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "itemCode",
         "value": ""
        }
       ]
      },
      "description": "Removes an item by its code within the plan."
     }
    }
   ]
  },
  {
   "name": "Invoice Categories",
   "item": [
    {
     "name": "List invoice categories",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceCategories"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of invoice categories. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create invoice category",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceCategories"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"SUBSCRIPTIONS\",\n  \"description\": \"string\",\n  \"sortIndex\": 10,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new invoice category. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get invoice category",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceCategories/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceCategories",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single invoice category by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update invoice category (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"SUBSCRIPTIONS\",\n  \"description\": \"string\",\n  \"sortIndex\": 10,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the category if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update invoice category",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"SUBSCRIPTIONS\",\n  \"description\": \"string\",\n  \"sortIndex\": 10,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing invoice category. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete invoice category",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the invoice category identified by the code. Fails if sub-categories still reference it."
     }
    }
   ]
  },
  {
   "name": "Invoice Sub Categories",
   "item": [
    {
     "name": "List invoice sub-categories",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSubCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSubCategories"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of invoice sub-categories. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create invoice sub-category",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSubCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSubCategories"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MONTHLY_FEES\",\n  \"description\": \"string\",\n  \"invoiceCategoryCode\": \"SUBSCRIPTIONS\",\n  \"accountingCode\": \"string\",\n  \"sortIndex\": 10,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new invoice sub-category. Fails if one already exists with the same code; use POST /{code} for create-or-update. The parent invoice category must exist. Returns 201."
     }
    },
    {
     "name": "Get invoice sub-category",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSubCategories/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSubCategories",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single invoice sub-category by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update invoice sub-category (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSubCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSubCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MONTHLY_FEES\",\n  \"description\": \"string\",\n  \"invoiceCategoryCode\": \"SUBSCRIPTIONS\",\n  \"accountingCode\": \"string\",\n  \"sortIndex\": 10,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the sub-category if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update invoice sub-category",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSubCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSubCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MONTHLY_FEES\",\n  \"description\": \"string\",\n  \"invoiceCategoryCode\": \"SUBSCRIPTIONS\",\n  \"accountingCode\": \"string\",\n  \"sortIndex\": 10,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing invoice sub-category. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete invoice sub-category",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/invoiceSubCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoiceSubCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the invoice sub-category identified by the code. Fails if it is still referenced by charges."
     }
    }
   ]
  },
  {
   "name": "Medias",
   "item": [
    {
     "name": "List medias",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/medias",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "medias"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of medias. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create media",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/medias",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "medias"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"LOGO_MAIN\",\n  \"description\": \"string\",\n  \"label\": \"Company logo\",\n  \"mediaName\": \"logo.png\",\n  \"main\": false,\n  \"mediaType\": \"IMAGE\",\n  \"filePath\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new media. label and mediaName are required. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get media",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/medias/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "medias",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single media by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update media (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/medias/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "medias",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"LOGO_MAIN\",\n  \"description\": \"string\",\n  \"label\": \"Company logo\",\n  \"mediaName\": \"logo.png\",\n  \"main\": false,\n  \"mediaType\": \"IMAGE\",\n  \"filePath\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the media if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update media",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/medias/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "medias",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"LOGO_MAIN\",\n  \"description\": \"string\",\n  \"label\": \"Company logo\",\n  \"mediaName\": \"logo.png\",\n  \"main\": false,\n  \"mediaType\": \"IMAGE\",\n  \"filePath\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing media. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete media",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/medias/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "medias",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the media identified by the code."
     }
    }
   ]
  },
  {
   "name": "Offer Templates",
   "item": [
    {
     "name": "List offer templates",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "status",
         "value": "",
         "disabled": true
        },
        {
         "key": "offerCategory",
         "value": "",
         "disabled": true
        },
        {
         "key": "seller",
         "value": "",
         "disabled": true
        },
        {
         "key": "isModel",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        },
        {
         "key": "q",
         "value": "",
         "disabled": true
        }
       ]
      }
     }
    },
    {
     "name": "Create offer template",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"newCode\": \"string\",\n  \"name\": \"string\",\n  \"description\": \"string\",\n  \"longDescription\": \"string\",\n  \"status\": \"string\",\n  \"statusDate\": \"string\",\n  \"isModel\": true,\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"offerCategory\": \"string\",\n  \"sellers\": [\n    \"string\"\n  ],\n  \"channels\": [\n    \"string\"\n  ],\n  \"medias\": [\n    \"string\"\n  ],\n  \"tags\": [\n    \"string\"\n  ],\n  \"discountPlans\": [\n    \"string\"\n  ],\n  \"commercialRules\": [\n    \"string\"\n  ],\n  \"termsAndConditions\": {\n    \"type\": \"string\",\n    \"initialTerm\": {\n      \"duration\": 0,\n      \"unit\": \"string\",\n      \"endDate\": \"string\",\n      \"calendar\": \"string\"\n    },\n    \"autoRenew\": true,\n    \"renewalTerm\": {\n      \"duration\": 0,\n      \"unit\": \"string\",\n      \"endDate\": \"string\",\n      \"calendar\": \"string\"\n    },\n    \"onExpiry\": \"string\",\n    \"terminationReason\": \"string\",\n    \"notifyDaysBefore\": 0,\n    \"alignEndDate\": true\n  },\n  \"minimumBilling\": {\n    \"amount_fx\": \"string\",\n    \"label_fx\": \"string\",\n    \"invoiceSubCategory\": \"string\",\n    \"charge\": \"string\",\n    \"article\": \"string\",\n    \"newCharge\": {},\n    \"newArticle\": {}\n  },\n  \"attributes\": [\n    {\n      \"attribute\": \"string\",\n      \"sequence\": 0,\n      \"mandatory\": true,\n      \"display\": true,\n      \"readOnly\": true,\n      \"defaultValue\": \"string\"\n    }\n  ],\n  \"products\": [\n    {\n      \"product\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"sequence\": 0,\n      \"mandatory\": true,\n      \"display\": true,\n      \"quantityMin\": 0,\n      \"quantityMax\": 0,\n      \"quantityDefault\": 0,\n      \"status\": \"string\",\n      \"currentProductVersion\": 0,\n      \"productDescription\": \"string\"\n    }\n  ],\n  \"generateQuoteEdrPerProduct\": true,\n  \"isOfferChangeRestricted\": true,\n  \"allowedOffersChange\": [\n    \"string\"\n  ],\n  \"unlinkSellers\": [\n    \"string\"\n  ],\n  \"unlinkChannels\": [\n    \"string\"\n  ],\n  \"unlinkMedias\": [\n    \"string\"\n  ],\n  \"unlinkTags\": [\n    \"string\"\n  ],\n  \"unlinkDiscountPlans\": [\n    \"string\"\n  ],\n  \"unlinkCommercialRules\": [\n    \"string\"\n  ],\n  \"unlinkProducts\": [\n    \"string\"\n  ],\n  \"removeAttributes\": [\n    \"string\"\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Get offer template",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Create or update offer template",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"newCode\": \"string\",\n  \"name\": \"string\",\n  \"description\": \"string\",\n  \"longDescription\": \"string\",\n  \"status\": \"string\",\n  \"statusDate\": \"string\",\n  \"isModel\": true,\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"offerCategory\": \"string\",\n  \"sellers\": [\n    \"string\"\n  ],\n  \"channels\": [\n    \"string\"\n  ],\n  \"medias\": [\n    \"string\"\n  ],\n  \"tags\": [\n    \"string\"\n  ],\n  \"discountPlans\": [\n    \"string\"\n  ],\n  \"commercialRules\": [\n    \"string\"\n  ],\n  \"termsAndConditions\": {\n    \"type\": \"string\",\n    \"initialTerm\": {\n      \"duration\": 0,\n      \"unit\": \"string\",\n      \"endDate\": \"string\",\n      \"calendar\": \"string\"\n    },\n    \"autoRenew\": true,\n    \"renewalTerm\": {\n      \"duration\": 0,\n      \"unit\": \"string\",\n      \"endDate\": \"string\",\n      \"calendar\": \"string\"\n    },\n    \"onExpiry\": \"string\",\n    \"terminationReason\": \"string\",\n    \"notifyDaysBefore\": 0,\n    \"alignEndDate\": true\n  },\n  \"minimumBilling\": {\n    \"amount_fx\": \"string\",\n    \"label_fx\": \"string\",\n    \"invoiceSubCategory\": \"string\",\n    \"charge\": \"string\",\n    \"article\": \"string\",\n    \"newCharge\": {},\n    \"newArticle\": {}\n  },\n  \"attributes\": [\n    {\n      \"attribute\": \"string\",\n      \"sequence\": 0,\n      \"mandatory\": true,\n      \"display\": true,\n      \"readOnly\": true,\n      \"defaultValue\": \"string\"\n    }\n  ],\n  \"products\": [\n    {\n      \"product\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"sequence\": 0,\n      \"mandatory\": true,\n      \"display\": true,\n      \"quantityMin\": 0,\n      \"quantityMax\": 0,\n      \"quantityDefault\": 0,\n      \"status\": \"string\",\n      \"currentProductVersion\": 0,\n      \"productDescription\": \"string\"\n    }\n  ],\n  \"generateQuoteEdrPerProduct\": true,\n  \"isOfferChangeRestricted\": true,\n  \"allowedOffersChange\": [\n    \"string\"\n  ],\n  \"unlinkSellers\": [\n    \"string\"\n  ],\n  \"unlinkChannels\": [\n    \"string\"\n  ],\n  \"unlinkMedias\": [\n    \"string\"\n  ],\n  \"unlinkTags\": [\n    \"string\"\n  ],\n  \"unlinkDiscountPlans\": [\n    \"string\"\n  ],\n  \"unlinkCommercialRules\": [\n    \"string\"\n  ],\n  \"unlinkProducts\": [\n    \"string\"\n  ],\n  \"removeAttributes\": [\n    \"string\"\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Update offer template",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"newCode\": \"string\",\n  \"name\": \"string\",\n  \"description\": \"string\",\n  \"longDescription\": \"string\",\n  \"status\": \"string\",\n  \"statusDate\": \"string\",\n  \"isModel\": true,\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"offerCategory\": \"string\",\n  \"sellers\": [\n    \"string\"\n  ],\n  \"channels\": [\n    \"string\"\n  ],\n  \"medias\": [\n    \"string\"\n  ],\n  \"tags\": [\n    \"string\"\n  ],\n  \"discountPlans\": [\n    \"string\"\n  ],\n  \"commercialRules\": [\n    \"string\"\n  ],\n  \"termsAndConditions\": {\n    \"type\": \"string\",\n    \"initialTerm\": {\n      \"duration\": 0,\n      \"unit\": \"string\",\n      \"endDate\": \"string\",\n      \"calendar\": \"string\"\n    },\n    \"autoRenew\": true,\n    \"renewalTerm\": {\n      \"duration\": 0,\n      \"unit\": \"string\",\n      \"endDate\": \"string\",\n      \"calendar\": \"string\"\n    },\n    \"onExpiry\": \"string\",\n    \"terminationReason\": \"string\",\n    \"notifyDaysBefore\": 0,\n    \"alignEndDate\": true\n  },\n  \"minimumBilling\": {\n    \"amount_fx\": \"string\",\n    \"label_fx\": \"string\",\n    \"invoiceSubCategory\": \"string\",\n    \"charge\": \"string\",\n    \"article\": \"string\",\n    \"newCharge\": {},\n    \"newArticle\": {}\n  },\n  \"attributes\": [\n    {\n      \"attribute\": \"string\",\n      \"sequence\": 0,\n      \"mandatory\": true,\n      \"display\": true,\n      \"readOnly\": true,\n      \"defaultValue\": \"string\"\n    }\n  ],\n  \"products\": [\n    {\n      \"product\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"sequence\": 0,\n      \"mandatory\": true,\n      \"display\": true,\n      \"quantityMin\": 0,\n      \"quantityMax\": 0,\n      \"quantityDefault\": 0,\n      \"status\": \"string\",\n      \"currentProductVersion\": 0,\n      \"productDescription\": \"string\"\n    }\n  ],\n  \"generateQuoteEdrPerProduct\": true,\n  \"isOfferChangeRestricted\": true,\n  \"allowedOffersChange\": [\n    \"string\"\n  ],\n  \"unlinkSellers\": [\n    \"string\"\n  ],\n  \"unlinkChannels\": [\n    \"string\"\n  ],\n  \"unlinkMedias\": [\n    \"string\"\n  ],\n  \"unlinkTags\": [\n    \"string\"\n  ],\n  \"unlinkDiscountPlans\": [\n    \"string\"\n  ],\n  \"unlinkCommercialRules\": [\n    \"string\"\n  ],\n  \"unlinkProducts\": [\n    \"string\"\n  ],\n  \"removeAttributes\": [\n    \"string\"\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Delete offer template",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Link attribute to offer (idempotent)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/attributes/:attributeCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "attributes",
        ":attributeCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "attributeCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Unlink attribute from offer (drops the OfferTemplateAttribute join row)",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/attributes/:attributeCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "attributes",
        ":attributeCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "attributeCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Link channel to offer (idempotent)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/channels/:channelCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "channels",
        ":channelCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "channelCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Unlink channel from offer",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/channels/:channelCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "channels",
        ":channelCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "channelCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Duplicate offer template",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/duplicate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "duplicate"
       ],
       "query": [
        {
         "key": "shallow",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Link media to offer (idempotent)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/medias/:mediaCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "medias",
        ":mediaCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "mediaCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Unlink media from offer",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/medias/:mediaCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "medias",
        ":mediaCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "mediaCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Add product(s) to offer. Accepts a single product object or a batch wrapper {products:[...]}.",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/products",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "products"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "\"string\"",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Create or update product association on offer",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/products/:productCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "products",
        ":productCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "productCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"product\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"sequence\": 0,\n  \"mandatory\": true,\n  \"display\": true,\n  \"quantityMin\": 0,\n  \"quantityMax\": 0,\n  \"quantityDefault\": 0,\n  \"productSet\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Update product association",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/products/:productCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "products",
        ":productCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "productCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"product\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"sequence\": 0,\n  \"mandatory\": true,\n  \"display\": true,\n  \"quantityMin\": 0,\n  \"quantityMax\": 0,\n  \"quantityDefault\": 0,\n  \"productSet\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Remove product from offer",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/products/:productCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "products",
        ":productCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "productCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Change offer template status",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerTemplates/:code/status",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerTemplates",
        ":code",
        "status"
       ],
       "query": [
        {
         "key": "status",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    }
   ]
  },
  {
   "name": "Offer Categories",
   "item": [
    {
     "name": "List offer categories",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerCategories"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of offer categories. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create offer category",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerCategories"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"TELECOM\",\n  \"description\": \"string\",\n  \"name\": \"Telecom offers\",\n  \"parentCategoryCode\": \"string\",\n  \"imagePath\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new offer category. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get offer category",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerCategories/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerCategories",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single offer category by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update offer category (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"TELECOM\",\n  \"description\": \"string\",\n  \"name\": \"Telecom offers\",\n  \"parentCategoryCode\": \"string\",\n  \"imagePath\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the category if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update offer category",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/offerCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"TELECOM\",\n  \"description\": \"string\",\n  \"name\": \"Telecom offers\",\n  \"parentCategoryCode\": \"string\",\n  \"imagePath\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing offer category. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete offer category",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/offerCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "offerCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the offer category identified by the code."
     }
    }
   ]
  },
  {
   "name": "Products",
   "item": [
    {
     "name": "List products",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "label",
         "value": "",
         "disabled": true
        },
        {
         "key": "status",
         "value": "",
         "disabled": true
        },
        {
         "key": "productLine",
         "value": "",
         "disabled": true
        },
        {
         "key": "brand",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        },
        {
         "key": "q",
         "value": "",
         "disabled": true
        }
       ]
      }
     }
    },
    {
     "name": "Create product",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/products",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"label\": \"string\",\n  \"status\": \"string\",\n  \"statusDate\": \"string\",\n  \"productLine\": \"string\",\n  \"brand\": \"string\",\n  \"reference\": \"string\",\n  \"discountFlag\": true,\n  \"isModel\": true,\n  \"billSeparately\": true,\n  \"productModelCode\": \"string\",\n  \"priceVersionDateSetting\": \"string\",\n  \"agreementDateSetting\": \"string\",\n  \"discountPlans\": [\n    \"string\"\n  ],\n  \"medias\": [\n    \"string\"\n  ],\n  \"commercialRules\": [\n    \"string\"\n  ],\n  \"version\": {\n    \"version\": 0,\n    \"currentVersion\": 0,\n    \"shortDescription\": \"string\",\n    \"longDescription\": \"string\",\n    \"status\": \"string\",\n    \"statusDate\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"attributes\": [\n      {\n        \"attribute\": \"string\",\n        \"sequence\": 0,\n        \"mandatory\": true,\n        \"mandatoryWithEl\": \"string\",\n        \"display\": true,\n        \"readOnly\": true,\n        \"defaultValue\": \"string\",\n        \"validationType\": \"string\",\n        \"validationPattern\": \"string\",\n        \"validationLabel\": \"string\",\n        \"attributeId\": 0,\n        \"attributeDescription\": \"string\",\n        \"attributeType\": \"string\",\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"tags\": [\n      \"string\"\n    ],\n    \"unlinkTags\": [\n      \"string\"\n    ],\n    \"removeAttributes\": [\n      \"string\"\n    ],\n    \"validity\": {}\n  },\n  \"currentVersion\": {\n    \"version\": 0,\n    \"currentVersion\": 0,\n    \"shortDescription\": \"string\",\n    \"longDescription\": \"string\",\n    \"status\": \"string\",\n    \"statusDate\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"attributes\": [\n      {\n        \"attribute\": \"string\",\n        \"sequence\": 0,\n        \"mandatory\": true,\n        \"mandatoryWithEl\": \"string\",\n        \"display\": true,\n        \"readOnly\": true,\n        \"defaultValue\": \"string\",\n        \"validationType\": \"string\",\n        \"validationPattern\": \"string\",\n        \"validationLabel\": \"string\",\n        \"attributeId\": 0,\n        \"attributeDescription\": \"string\",\n        \"attributeType\": \"string\",\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"tags\": [\n      \"string\"\n    ],\n    \"unlinkTags\": [\n      \"string\"\n    ],\n    \"removeAttributes\": [\n      \"string\"\n    ],\n    \"validity\": {}\n  },\n  \"versions\": [\n    {\n      \"version\": 0,\n      \"currentVersion\": 0,\n      \"shortDescription\": \"string\",\n      \"longDescription\": \"string\",\n      \"status\": \"string\",\n      \"statusDate\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"attributes\": [\n        {\n          \"attribute\": null,\n          \"sequence\": null,\n          \"mandatory\": null,\n          \"mandatoryWithEl\": null,\n          \"display\": null,\n          \"readOnly\": null,\n          \"defaultValue\": null,\n          \"validationType\": null,\n          \"validationPattern\": null,\n          \"validationLabel\": null,\n          \"attributeId\": null,\n          \"attributeDescription\": null,\n          \"attributeType\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"tags\": [\n        \"string\"\n      ],\n      \"unlinkTags\": [\n        \"string\"\n      ],\n      \"removeAttributes\": [\n        \"string\"\n      ],\n      \"validity\": {}\n    }\n  ],\n  \"charges\": [\n    {\n      \"id\": 0,\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"descriptionI18n\": {},\n      \"status\": \"string\",\n      \"attributes\": [\n        {\n          \"code\": null,\n          \"defaultValue\": null,\n          \"validFrom\": null,\n          \"validTo\": null\n        }\n      ],\n      \"unlinkAttributes\": [\n        \"string\"\n      ],\n      \"invoiceSubCategory\": \"string\",\n      \"taxClass\": \"string\",\n      \"taxInclusive\": true,\n      \"billingCalendar\": \"string\",\n      \"invoicingCalendar\": \"string\",\n      \"ratingOptions\": {\n        \"calendar\": \"string\",\n        \"calendar_fx\": \"string\",\n        \"startDateStrategy\": \"string\",\n        \"accumulator\": {\n          \"type\": null,\n          \"trackedValue\": null,\n          \"key_fx\": null,\n          \"value_fx\": null,\n          \"filter_fx\": null,\n          \"dimensions\": null,\n          \"ceiling\": null,\n          \"initialValue\": null\n        }\n      },\n      \"inputUnitOfMeasure\": \"string\",\n      \"ratingUnitOfMeasure\": \"string\",\n      \"roundingMode\": \"string\",\n      \"unitNbDecimal\": 0,\n      \"unitMultiplicator\": 0,\n      \"inputUnitDescription\": \"string\",\n      \"ratingUnitDescription\": \"string\",\n      \"quantityAttribute\": \"string\",\n      \"internalNote\": \"string\",\n      \"dropZeroWo\": true,\n      \"billSeparately\": true,\n      \"articleSimilarToCharge\": true,\n      \"newArticle\": {},\n      \"invoiceType\": \"string\",\n      \"invoiceType_fx\": \"string\",\n      \"accountingCode\": \"string\",\n      \"accountCode_fx\": \"string\",\n      \"newVersion\": {},\n      \"pricing\": {\n        \"mode\": \"string\",\n        \"baseCurrency\": \"string\",\n        \"price\": 0,\n        \"priceFormula\": \"string\",\n        \"label\": \"string\",\n        \"validFrom\": \"string\",\n        \"validTo\": \"string\",\n        \"currency\": \"string\",\n        \"pricingModel\": \"string\",\n        \"tiers\": [\n          null\n        ],\n        \"dimensions\": [\n          null\n        ],\n        \"rows\": [\n          null\n        ],\n        \"defaultPrice\": 0,\n        \"versionNumber\": 0,\n        \"versionStatus\": \"string\",\n        \"autoPublish\": true,\n        \"currencyPrices\": [\n          null\n        ],\n        \"parameter_extra_fx\": \"string\"\n      },\n      \"pricingVersions\": [\n        {\n          \"version\": null,\n          \"label\": null,\n          \"pricingModel\": null,\n          \"status\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"validFrom\": null,\n          \"validTo\": null,\n          \"currency\": null,\n          \"priority\": null,\n          \"seller\": null,\n          \"country\": null,\n          \"tiers\": null,\n          \"packageSize\": null,\n          \"percentage\": null,\n          \"baseCharge\": null,\n          \"columns\": null,\n          \"rows\": null,\n          \"defaultPrice\": null,\n          \"ratingScript\": null,\n          \"supersede\": null,\n          \"currencyPrices\": null,\n          \"parameter_extra_fx\": null\n        }\n      ],\n      \"filter_fx\": \"string\",\n      \"sortIndex_fx\": \"string\",\n      \"parameters\": {\n        \"param1\": {\n          \"description\": null,\n          \"format\": null,\n          \"mandatory\": null,\n          \"hidden\": null\n        },\n        \"param2\": {\n          \"description\": null,\n          \"format\": null,\n          \"mandatory\": null,\n          \"hidden\": null\n        },\n        \"param3\": {\n          \"description\": null,\n          \"format\": null,\n          \"mandatory\": null,\n          \"hidden\": null\n        }\n      },\n      \"oneShotType\": \"string\",\n      \"immediateInvoicing\": true,\n      \"amountEditable\": true,\n      \"subscriptionProrata\": true,\n      \"terminationProrata\": true,\n      \"applyInAdvance\": true,\n      \"anticipateEndOfSubscription\": true,\n      \"chargeApplicationCalendar_fx\": \"string\",\n      \"applyInAdvance_fx\": \"string\",\n      \"subscriptionProrata_fx\": \"string\",\n      \"terminationProrata_fx\": \"string\",\n      \"applyTerminatedChargeToDate_fx\": \"string\",\n      \"prorataOnPriceChange\": true,\n      \"filterParam1\": \"string\",\n      \"filterParam2\": \"string\",\n      \"filterParam3\": \"string\",\n      \"filterParam4\": \"string\",\n      \"priority\": 0,\n      \"triggerNextCharge\": true,\n      \"triggerNextCharge_fx\": \"string\",\n      \"inputUnit_fx\": \"string\",\n      \"outputUnit_fx\": \"string\",\n      \"businessKey_fx\": \"string\",\n      \"businessKeyFormat\": \"string\",\n      \"customFields\": {},\n      \"auditable\": {\n        \"created\": \"string\",\n        \"creator\": \"string\",\n        \"updated\": \"string\",\n        \"updater\": \"string\"\n      },\n      \"chargeCode\": \"string\",\n      \"counters\": [\n        \"string\"\n      ],\n      \"counterCode\": \"string\",\n      \"accumulatorCounterCodes\": [\n        \"string\"\n      ],\n      \"chargeType\": \"string\"\n    }\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"unlinkMedias\": [\n    \"string\"\n  ],\n  \"unlinkDiscountPlans\": [\n    \"string\"\n  ],\n  \"unlinkCommercialRules\": [\n    \"string\"\n  ],\n  \"removeCharges\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Get product",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":codeOrId"
       ],
       "query": [
        {
         "key": "includeLatestPriceVersions",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Returns a product by code or id. When `includeLatestPriceVersions=true`, each charge in `charges[]` is hydrated with its full `pricingVersions[]` list (including matrix columns referencing attributes, matrix rows, and tiered pricing). Default `false` keeps the response lightweight and byte-compatible with pre-existing clients."
     }
    },
    {
     "name": "Create or update product",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"label\": \"string\",\n  \"status\": \"string\",\n  \"statusDate\": \"string\",\n  \"productLine\": \"string\",\n  \"brand\": \"string\",\n  \"reference\": \"string\",\n  \"discountFlag\": true,\n  \"isModel\": true,\n  \"billSeparately\": true,\n  \"productModelCode\": \"string\",\n  \"priceVersionDateSetting\": \"string\",\n  \"agreementDateSetting\": \"string\",\n  \"discountPlans\": [\n    \"string\"\n  ],\n  \"medias\": [\n    \"string\"\n  ],\n  \"commercialRules\": [\n    \"string\"\n  ],\n  \"version\": {\n    \"version\": 0,\n    \"currentVersion\": 0,\n    \"shortDescription\": \"string\",\n    \"longDescription\": \"string\",\n    \"status\": \"string\",\n    \"statusDate\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"attributes\": [\n      {\n        \"attribute\": \"string\",\n        \"sequence\": 0,\n        \"mandatory\": true,\n        \"mandatoryWithEl\": \"string\",\n        \"display\": true,\n        \"readOnly\": true,\n        \"defaultValue\": \"string\",\n        \"validationType\": \"string\",\n        \"validationPattern\": \"string\",\n        \"validationLabel\": \"string\",\n        \"attributeId\": 0,\n        \"attributeDescription\": \"string\",\n        \"attributeType\": \"string\",\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"tags\": [\n      \"string\"\n    ],\n    \"unlinkTags\": [\n      \"string\"\n    ],\n    \"removeAttributes\": [\n      \"string\"\n    ],\n    \"validity\": {}\n  },\n  \"currentVersion\": {\n    \"version\": 0,\n    \"currentVersion\": 0,\n    \"shortDescription\": \"string\",\n    \"longDescription\": \"string\",\n    \"status\": \"string\",\n    \"statusDate\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"attributes\": [\n      {\n        \"attribute\": \"string\",\n        \"sequence\": 0,\n        \"mandatory\": true,\n        \"mandatoryWithEl\": \"string\",\n        \"display\": true,\n        \"readOnly\": true,\n        \"defaultValue\": \"string\",\n        \"validationType\": \"string\",\n        \"validationPattern\": \"string\",\n        \"validationLabel\": \"string\",\n        \"attributeId\": 0,\n        \"attributeDescription\": \"string\",\n        \"attributeType\": \"string\",\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"tags\": [\n      \"string\"\n    ],\n    \"unlinkTags\": [\n      \"string\"\n    ],\n    \"removeAttributes\": [\n      \"string\"\n    ],\n    \"validity\": {}\n  },\n  \"versions\": [\n    {\n      \"version\": 0,\n      \"currentVersion\": 0,\n      \"shortDescription\": \"string\",\n      \"longDescription\": \"string\",\n      \"status\": \"string\",\n      \"statusDate\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"attributes\": [\n        {\n          \"attribute\": null,\n          \"sequence\": null,\n          \"mandatory\": null,\n          \"mandatoryWithEl\": null,\n          \"display\": null,\n          \"readOnly\": null,\n          \"defaultValue\": null,\n          \"validationType\": null,\n          \"validationPattern\": null,\n          \"validationLabel\": null,\n          \"attributeId\": null,\n          \"attributeDescription\": null,\n          \"attributeType\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"tags\": [\n        \"string\"\n      ],\n      \"unlinkTags\": [\n        \"string\"\n      ],\n      \"removeAttributes\": [\n        \"string\"\n      ],\n      \"validity\": {}\n    }\n  ],\n  \"charges\": [\n    {\n      \"id\": 0,\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"descriptionI18n\": {},\n      \"status\": \"string\",\n      \"attributes\": [\n        {\n          \"code\": null,\n          \"defaultValue\": null,\n          \"validFrom\": null,\n          \"validTo\": null\n        }\n      ],\n      \"unlinkAttributes\": [\n        \"string\"\n      ],\n      \"invoiceSubCategory\": \"string\",\n      \"taxClass\": \"string\",\n      \"taxInclusive\": true,\n      \"billingCalendar\": \"string\",\n      \"invoicingCalendar\": \"string\",\n      \"ratingOptions\": {\n        \"calendar\": \"string\",\n        \"calendar_fx\": \"string\",\n        \"startDateStrategy\": \"string\",\n        \"accumulator\": {\n          \"type\": null,\n          \"trackedValue\": null,\n          \"key_fx\": null,\n          \"value_fx\": null,\n          \"filter_fx\": null,\n          \"dimensions\": null,\n          \"ceiling\": null,\n          \"initialValue\": null\n        }\n      },\n      \"inputUnitOfMeasure\": \"string\",\n      \"ratingUnitOfMeasure\": \"string\",\n      \"roundingMode\": \"string\",\n      \"unitNbDecimal\": 0,\n      \"unitMultiplicator\": 0,\n      \"inputUnitDescription\": \"string\",\n      \"ratingUnitDescription\": \"string\",\n      \"quantityAttribute\": \"string\",\n      \"internalNote\": \"string\",\n      \"dropZeroWo\": true,\n      \"billSeparately\": true,\n      \"articleSimilarToCharge\": true,\n      \"newArticle\": {},\n      \"invoiceType\": \"string\",\n      \"invoiceType_fx\": \"string\",\n      \"accountingCode\": \"string\",\n      \"accountCode_fx\": \"string\",\n      \"newVersion\": {},\n      \"pricing\": {\n        \"mode\": \"string\",\n        \"baseCurrency\": \"string\",\n        \"price\": 0,\n        \"priceFormula\": \"string\",\n        \"label\": \"string\",\n        \"validFrom\": \"string\",\n        \"validTo\": \"string\",\n        \"currency\": \"string\",\n        \"pricingModel\": \"string\",\n        \"tiers\": [\n          null\n        ],\n        \"dimensions\": [\n          null\n        ],\n        \"rows\": [\n          null\n        ],\n        \"defaultPrice\": 0,\n        \"versionNumber\": 0,\n        \"versionStatus\": \"string\",\n        \"autoPublish\": true,\n        \"currencyPrices\": [\n          null\n        ],\n        \"parameter_extra_fx\": \"string\"\n      },\n      \"pricingVersions\": [\n        {\n          \"version\": null,\n          \"label\": null,\n          \"pricingModel\": null,\n          \"status\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"validFrom\": null,\n          \"validTo\": null,\n          \"currency\": null,\n          \"priority\": null,\n          \"seller\": null,\n          \"country\": null,\n          \"tiers\": null,\n          \"packageSize\": null,\n          \"percentage\": null,\n          \"baseCharge\": null,\n          \"columns\": null,\n          \"rows\": null,\n          \"defaultPrice\": null,\n          \"ratingScript\": null,\n          \"supersede\": null,\n          \"currencyPrices\": null,\n          \"parameter_extra_fx\": null\n        }\n      ],\n      \"filter_fx\": \"string\",\n      \"sortIndex_fx\": \"string\",\n      \"parameters\": {\n        \"param1\": {\n          \"description\": null,\n          \"format\": null,\n          \"mandatory\": null,\n          \"hidden\": null\n        },\n        \"param2\": {\n          \"description\": null,\n          \"format\": null,\n          \"mandatory\": null,\n          \"hidden\": null\n        },\n        \"param3\": {\n          \"description\": null,\n          \"format\": null,\n          \"mandatory\": null,\n          \"hidden\": null\n        }\n      },\n      \"oneShotType\": \"string\",\n      \"immediateInvoicing\": true,\n      \"amountEditable\": true,\n      \"subscriptionProrata\": true,\n      \"terminationProrata\": true,\n      \"applyInAdvance\": true,\n      \"anticipateEndOfSubscription\": true,\n      \"chargeApplicationCalendar_fx\": \"string\",\n      \"applyInAdvance_fx\": \"string\",\n      \"subscriptionProrata_fx\": \"string\",\n      \"terminationProrata_fx\": \"string\",\n      \"applyTerminatedChargeToDate_fx\": \"string\",\n      \"prorataOnPriceChange\": true,\n      \"filterParam1\": \"string\",\n      \"filterParam2\": \"string\",\n      \"filterParam3\": \"string\",\n      \"filterParam4\": \"string\",\n      \"priority\": 0,\n      \"triggerNextCharge\": true,\n      \"triggerNextCharge_fx\": \"string\",\n      \"inputUnit_fx\": \"string\",\n      \"outputUnit_fx\": \"string\",\n      \"businessKey_fx\": \"string\",\n      \"businessKeyFormat\": \"string\",\n      \"customFields\": {},\n      \"auditable\": {\n        \"created\": \"string\",\n        \"creator\": \"string\",\n        \"updated\": \"string\",\n        \"updater\": \"string\"\n      },\n      \"chargeCode\": \"string\",\n      \"counters\": [\n        \"string\"\n      ],\n      \"counterCode\": \"string\",\n      \"accumulatorCounterCodes\": [\n        \"string\"\n      ],\n      \"chargeType\": \"string\"\n    }\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"unlinkMedias\": [\n    \"string\"\n  ],\n  \"unlinkDiscountPlans\": [\n    \"string\"\n  ],\n  \"unlinkCommercialRules\": [\n    \"string\"\n  ],\n  \"removeCharges\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Update product",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"label\": \"string\",\n  \"status\": \"string\",\n  \"statusDate\": \"string\",\n  \"productLine\": \"string\",\n  \"brand\": \"string\",\n  \"reference\": \"string\",\n  \"discountFlag\": true,\n  \"isModel\": true,\n  \"billSeparately\": true,\n  \"productModelCode\": \"string\",\n  \"priceVersionDateSetting\": \"string\",\n  \"agreementDateSetting\": \"string\",\n  \"discountPlans\": [\n    \"string\"\n  ],\n  \"medias\": [\n    \"string\"\n  ],\n  \"commercialRules\": [\n    \"string\"\n  ],\n  \"version\": {\n    \"version\": 0,\n    \"currentVersion\": 0,\n    \"shortDescription\": \"string\",\n    \"longDescription\": \"string\",\n    \"status\": \"string\",\n    \"statusDate\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"attributes\": [\n      {\n        \"attribute\": \"string\",\n        \"sequence\": 0,\n        \"mandatory\": true,\n        \"mandatoryWithEl\": \"string\",\n        \"display\": true,\n        \"readOnly\": true,\n        \"defaultValue\": \"string\",\n        \"validationType\": \"string\",\n        \"validationPattern\": \"string\",\n        \"validationLabel\": \"string\",\n        \"attributeId\": 0,\n        \"attributeDescription\": \"string\",\n        \"attributeType\": \"string\",\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"tags\": [\n      \"string\"\n    ],\n    \"unlinkTags\": [\n      \"string\"\n    ],\n    \"removeAttributes\": [\n      \"string\"\n    ],\n    \"validity\": {}\n  },\n  \"currentVersion\": {\n    \"version\": 0,\n    \"currentVersion\": 0,\n    \"shortDescription\": \"string\",\n    \"longDescription\": \"string\",\n    \"status\": \"string\",\n    \"statusDate\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"attributes\": [\n      {\n        \"attribute\": \"string\",\n        \"sequence\": 0,\n        \"mandatory\": true,\n        \"mandatoryWithEl\": \"string\",\n        \"display\": true,\n        \"readOnly\": true,\n        \"defaultValue\": \"string\",\n        \"validationType\": \"string\",\n        \"validationPattern\": \"string\",\n        \"validationLabel\": \"string\",\n        \"attributeId\": 0,\n        \"attributeDescription\": \"string\",\n        \"attributeType\": \"string\",\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"tags\": [\n      \"string\"\n    ],\n    \"unlinkTags\": [\n      \"string\"\n    ],\n    \"removeAttributes\": [\n      \"string\"\n    ],\n    \"validity\": {}\n  },\n  \"versions\": [\n    {\n      \"version\": 0,\n      \"currentVersion\": 0,\n      \"shortDescription\": \"string\",\n      \"longDescription\": \"string\",\n      \"status\": \"string\",\n      \"statusDate\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"attributes\": [\n        {\n          \"attribute\": null,\n          \"sequence\": null,\n          \"mandatory\": null,\n          \"mandatoryWithEl\": null,\n          \"display\": null,\n          \"readOnly\": null,\n          \"defaultValue\": null,\n          \"validationType\": null,\n          \"validationPattern\": null,\n          \"validationLabel\": null,\n          \"attributeId\": null,\n          \"attributeDescription\": null,\n          \"attributeType\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"tags\": [\n        \"string\"\n      ],\n      \"unlinkTags\": [\n        \"string\"\n      ],\n      \"removeAttributes\": [\n        \"string\"\n      ],\n      \"validity\": {}\n    }\n  ],\n  \"charges\": [\n    {\n      \"id\": 0,\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"descriptionI18n\": {},\n      \"status\": \"string\",\n      \"attributes\": [\n        {\n          \"code\": null,\n          \"defaultValue\": null,\n          \"validFrom\": null,\n          \"validTo\": null\n        }\n      ],\n      \"unlinkAttributes\": [\n        \"string\"\n      ],\n      \"invoiceSubCategory\": \"string\",\n      \"taxClass\": \"string\",\n      \"taxInclusive\": true,\n      \"billingCalendar\": \"string\",\n      \"invoicingCalendar\": \"string\",\n      \"ratingOptions\": {\n        \"calendar\": \"string\",\n        \"calendar_fx\": \"string\",\n        \"startDateStrategy\": \"string\",\n        \"accumulator\": {\n          \"type\": null,\n          \"trackedValue\": null,\n          \"key_fx\": null,\n          \"value_fx\": null,\n          \"filter_fx\": null,\n          \"dimensions\": null,\n          \"ceiling\": null,\n          \"initialValue\": null\n        }\n      },\n      \"inputUnitOfMeasure\": \"string\",\n      \"ratingUnitOfMeasure\": \"string\",\n      \"roundingMode\": \"string\",\n      \"unitNbDecimal\": 0,\n      \"unitMultiplicator\": 0,\n      \"inputUnitDescription\": \"string\",\n      \"ratingUnitDescription\": \"string\",\n      \"quantityAttribute\": \"string\",\n      \"internalNote\": \"string\",\n      \"dropZeroWo\": true,\n      \"billSeparately\": true,\n      \"articleSimilarToCharge\": true,\n      \"newArticle\": {},\n      \"invoiceType\": \"string\",\n      \"invoiceType_fx\": \"string\",\n      \"accountingCode\": \"string\",\n      \"accountCode_fx\": \"string\",\n      \"newVersion\": {},\n      \"pricing\": {\n        \"mode\": \"string\",\n        \"baseCurrency\": \"string\",\n        \"price\": 0,\n        \"priceFormula\": \"string\",\n        \"label\": \"string\",\n        \"validFrom\": \"string\",\n        \"validTo\": \"string\",\n        \"currency\": \"string\",\n        \"pricingModel\": \"string\",\n        \"tiers\": [\n          null\n        ],\n        \"dimensions\": [\n          null\n        ],\n        \"rows\": [\n          null\n        ],\n        \"defaultPrice\": 0,\n        \"versionNumber\": 0,\n        \"versionStatus\": \"string\",\n        \"autoPublish\": true,\n        \"currencyPrices\": [\n          null\n        ],\n        \"parameter_extra_fx\": \"string\"\n      },\n      \"pricingVersions\": [\n        {\n          \"version\": null,\n          \"label\": null,\n          \"pricingModel\": null,\n          \"status\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"validFrom\": null,\n          \"validTo\": null,\n          \"currency\": null,\n          \"priority\": null,\n          \"seller\": null,\n          \"country\": null,\n          \"tiers\": null,\n          \"packageSize\": null,\n          \"percentage\": null,\n          \"baseCharge\": null,\n          \"columns\": null,\n          \"rows\": null,\n          \"defaultPrice\": null,\n          \"ratingScript\": null,\n          \"supersede\": null,\n          \"currencyPrices\": null,\n          \"parameter_extra_fx\": null\n        }\n      ],\n      \"filter_fx\": \"string\",\n      \"sortIndex_fx\": \"string\",\n      \"parameters\": {\n        \"param1\": {\n          \"description\": null,\n          \"format\": null,\n          \"mandatory\": null,\n          \"hidden\": null\n        },\n        \"param2\": {\n          \"description\": null,\n          \"format\": null,\n          \"mandatory\": null,\n          \"hidden\": null\n        },\n        \"param3\": {\n          \"description\": null,\n          \"format\": null,\n          \"mandatory\": null,\n          \"hidden\": null\n        }\n      },\n      \"oneShotType\": \"string\",\n      \"immediateInvoicing\": true,\n      \"amountEditable\": true,\n      \"subscriptionProrata\": true,\n      \"terminationProrata\": true,\n      \"applyInAdvance\": true,\n      \"anticipateEndOfSubscription\": true,\n      \"chargeApplicationCalendar_fx\": \"string\",\n      \"applyInAdvance_fx\": \"string\",\n      \"subscriptionProrata_fx\": \"string\",\n      \"terminationProrata_fx\": \"string\",\n      \"applyTerminatedChargeToDate_fx\": \"string\",\n      \"prorataOnPriceChange\": true,\n      \"filterParam1\": \"string\",\n      \"filterParam2\": \"string\",\n      \"filterParam3\": \"string\",\n      \"filterParam4\": \"string\",\n      \"priority\": 0,\n      \"triggerNextCharge\": true,\n      \"triggerNextCharge_fx\": \"string\",\n      \"inputUnit_fx\": \"string\",\n      \"outputUnit_fx\": \"string\",\n      \"businessKey_fx\": \"string\",\n      \"businessKeyFormat\": \"string\",\n      \"customFields\": {},\n      \"auditable\": {\n        \"created\": \"string\",\n        \"creator\": \"string\",\n        \"updated\": \"string\",\n        \"updater\": \"string\"\n      },\n      \"chargeCode\": \"string\",\n      \"counters\": [\n        \"string\"\n      ],\n      \"counterCode\": \"string\",\n      \"accumulatorCounterCodes\": [\n        \"string\"\n      ],\n      \"chargeType\": \"string\"\n    }\n  ],\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"unlinkMedias\": [\n    \"string\"\n  ],\n  \"unlinkDiscountPlans\": [\n    \"string\"\n  ],\n  \"unlinkCommercialRules\": [\n    \"string\"\n  ],\n  \"removeCharges\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Delete product",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "List product charges",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/charges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "charges"
       ],
       "query": [
        {
         "key": "includeLatestPriceVersions",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns the charges attached to a product. When `includeLatestPriceVersions=true`, each charge is hydrated with its full `pricingVersions[]` list. Default `true` here — the standalone charges endpoint already populates pricing, so we keep that behavior but let callers opt out for smaller payloads."
     }
    },
    {
     "name": "Attach an existing charge to a product",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/charges",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "charges"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeCode\": \"string\",\n  \"counters\": [\n    \"string\"\n  ],\n  \"counterCode\": \"string\",\n  \"accumulatorCounterCodes\": [\n    \"string\"\n  ],\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Reference-only. Body must carry `chargeCode` (the code of an existing charge template). Returns 400 CHARGE_NOT_FOUND if the referenced template doesn't exist — create it first via POST /v1/charges/{code}. Returns 400 CHARGE_REFERENCE_REQUIRED if `chargeCode` is missing. Idempotent: re-attaching an already-linked charge is a no-op."
     }
    },
    {
     "name": "Bulk attach/detach/update charges on a product",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/charges/bulk",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "charges",
        "bulk"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"operations\": [\n    {\n      \"action\": \"string\",\n      \"chargeCode\": \"string\",\n      \"body\": {\n        \"id\": 0,\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"descriptionI18n\": {},\n        \"status\": \"string\",\n        \"attributes\": [\n          null\n        ],\n        \"unlinkAttributes\": [\n          null\n        ],\n        \"invoiceSubCategory\": \"string\",\n        \"taxClass\": \"string\",\n        \"taxInclusive\": true,\n        \"billingCalendar\": \"string\",\n        \"invoicingCalendar\": \"string\",\n        \"ratingOptions\": {\n          \"calendar\": null,\n          \"calendar_fx\": null,\n          \"startDateStrategy\": null,\n          \"accumulator\": null\n        },\n        \"inputUnitOfMeasure\": \"string\",\n        \"ratingUnitOfMeasure\": \"string\",\n        \"roundingMode\": \"string\",\n        \"unitNbDecimal\": 0,\n        \"unitMultiplicator\": 0,\n        \"inputUnitDescription\": \"string\",\n        \"ratingUnitDescription\": \"string\",\n        \"quantityAttribute\": \"string\",\n        \"internalNote\": \"string\",\n        \"dropZeroWo\": true,\n        \"billSeparately\": true,\n        \"articleSimilarToCharge\": true,\n        \"newArticle\": {},\n        \"invoiceType\": \"string\",\n        \"invoiceType_fx\": \"string\",\n        \"accountingCode\": \"string\",\n        \"accountCode_fx\": \"string\",\n        \"newVersion\": {},\n        \"pricing\": {\n          \"mode\": null,\n          \"baseCurrency\": null,\n          \"price\": null,\n          \"priceFormula\": null,\n          \"label\": null,\n          \"validFrom\": null,\n          \"validTo\": null,\n          \"currency\": null,\n          \"pricingModel\": null,\n          \"tiers\": null,\n          \"dimensions\": null,\n          \"rows\": null,\n          \"defaultPrice\": null,\n          \"versionNumber\": null,\n          \"versionStatus\": null,\n          \"autoPublish\": null,\n          \"currencyPrices\": null,\n          \"parameter_extra_fx\": null\n        },\n        \"pricingVersions\": [\n          null\n        ],\n        \"filter_fx\": \"string\",\n        \"sortIndex_fx\": \"string\",\n        \"parameters\": {\n          \"param1\": null,\n          \"param2\": null,\n          \"param3\": null\n        },\n        \"oneShotType\": \"string\",\n        \"immediateInvoicing\": true,\n        \"amountEditable\": true,\n        \"subscriptionProrata\": true,\n        \"terminationProrata\": true,\n        \"applyInAdvance\": true,\n        \"anticipateEndOfSubscription\": true,\n        \"chargeApplicationCalendar_fx\": \"string\",\n        \"applyInAdvance_fx\": \"string\",\n        \"subscriptionProrata_fx\": \"string\",\n        \"terminationProrata_fx\": \"string\",\n        \"applyTerminatedChargeToDate_fx\": \"string\",\n        \"prorataOnPriceChange\": true,\n        \"filterParam1\": \"string\",\n        \"filterParam2\": \"string\",\n        \"filterParam3\": \"string\",\n        \"filterParam4\": \"string\",\n        \"priority\": 0,\n        \"triggerNextCharge\": true,\n        \"triggerNextCharge_fx\": \"string\",\n        \"inputUnit_fx\": \"string\",\n        \"outputUnit_fx\": \"string\",\n        \"businessKey_fx\": \"string\",\n        \"businessKeyFormat\": \"string\",\n        \"customFields\": {},\n        \"auditable\": {\n          \"created\": null,\n          \"creator\": null,\n          \"updated\": null,\n          \"updater\": null\n        },\n        \"chargeCode\": \"string\",\n        \"counters\": [\n          null\n        ],\n        \"counterCode\": \"string\",\n        \"accumulatorCounterCodes\": [\n          null\n        ],\n        \"chargeType\": \"string\"\n      }\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Runs up to 100 attach/detach/update operations on a product's charges in one call. Best-effort (per-item status), not transactional. Supports Idempotency-Key header for safe retries (24h TTL)."
     }
    },
    {
     "name": "Create or update charge attachment on product",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/charges/:chargeCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "charges",
        ":chargeCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "chargeCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeCode\": \"string\",\n  \"counters\": [\n    \"string\"\n  ],\n  \"counterCode\": \"string\",\n  \"accumulatorCounterCodes\": [\n    \"string\"\n  ],\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Reference-only upsert of the attachment. Creates the link if missing, updates mapping fields (counterCode, accumulatorCounterCodes) if present. The referenced charge must already exist."
     }
    },
    {
     "name": "Update charge mapping",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/charges/:chargeCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "charges",
        ":chargeCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "chargeCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"descriptionI18n\": {},\n  \"status\": \"string\",\n  \"attributes\": [\n    {\n      \"code\": \"string\",\n      \"defaultValue\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\"\n    }\n  ],\n  \"unlinkAttributes\": [\n    \"string\"\n  ],\n  \"invoiceSubCategory\": \"string\",\n  \"taxClass\": \"string\",\n  \"taxInclusive\": true,\n  \"billingCalendar\": \"string\",\n  \"invoicingCalendar\": \"string\",\n  \"ratingOptions\": {\n    \"calendar\": \"string\",\n    \"calendar_fx\": \"string\",\n    \"startDateStrategy\": \"string\",\n    \"accumulator\": {\n      \"type\": \"string\",\n      \"trackedValue\": \"string\",\n      \"key_fx\": \"string\",\n      \"value_fx\": \"string\",\n      \"filter_fx\": \"string\",\n      \"dimensions\": {\n        \"key_fx\": \"string\",\n        \"value_fx\": \"string\",\n        \"filter_fx\": \"string\"\n      },\n      \"ceiling\": 0,\n      \"initialValue\": 0\n    }\n  },\n  \"inputUnitOfMeasure\": \"string\",\n  \"ratingUnitOfMeasure\": \"string\",\n  \"roundingMode\": \"string\",\n  \"unitNbDecimal\": 0,\n  \"unitMultiplicator\": 0,\n  \"inputUnitDescription\": \"string\",\n  \"ratingUnitDescription\": \"string\",\n  \"quantityAttribute\": \"string\",\n  \"internalNote\": \"string\",\n  \"dropZeroWo\": true,\n  \"billSeparately\": true,\n  \"articleSimilarToCharge\": true,\n  \"newArticle\": {},\n  \"invoiceType\": \"string\",\n  \"invoiceType_fx\": \"string\",\n  \"accountingCode\": \"string\",\n  \"accountCode_fx\": \"string\",\n  \"newVersion\": {},\n  \"pricing\": {\n    \"mode\": \"string\",\n    \"baseCurrency\": \"string\",\n    \"price\": 0,\n    \"priceFormula\": \"string\",\n    \"label\": \"string\",\n    \"validFrom\": \"string\",\n    \"validTo\": \"string\",\n    \"currency\": \"string\",\n    \"pricingModel\": \"string\",\n    \"tiers\": [\n      {\n        \"from\": 0,\n        \"to\": 0,\n        \"price\": 0,\n        \"price_fx\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"dimensions\": [\n      {\n        \"code\": \"string\",\n        \"label\": \"string\",\n        \"type\": \"string\",\n        \"position\": 0,\n        \"attributeCode\": \"string\",\n        \"elValue\": \"string\",\n        \"isRange\": true,\n        \"allowedValues\": [\n          null\n        ]\n      }\n    ],\n    \"rows\": [\n      {\n        \"priority\": 0,\n        \"description\": \"string\",\n        \"values\": [\n          null\n        ],\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"defaultPrice\": 0,\n    \"versionNumber\": 0,\n    \"versionStatus\": \"string\",\n    \"autoPublish\": true,\n    \"currencyPrices\": [\n      {\n        \"currency\": \"string\",\n        \"price\": 0,\n        \"price_fx\": \"string\"\n      }\n    ],\n    \"parameter_extra_fx\": \"string\"\n  },\n  \"pricingVersions\": [\n    {\n      \"version\": 0,\n      \"label\": \"string\",\n      \"pricingModel\": \"string\",\n      \"status\": \"string\",\n      \"price\": 0,\n      \"price_fx\": \"string\",\n      \"validFrom\": \"string\",\n      \"validTo\": \"string\",\n      \"currency\": \"string\",\n      \"priority\": 0,\n      \"seller\": \"string\",\n      \"country\": \"string\",\n      \"tiers\": [\n        {\n          \"from\": null,\n          \"to\": null,\n          \"price\": null,\n          \"price_fx\": null,\n          \"description\": null\n        }\n      ],\n      \"packageSize\": 0,\n      \"percentage\": 0,\n      \"baseCharge\": \"string\",\n      \"columns\": [\n        {\n          \"code\": null,\n          \"label\": null,\n          \"type\": null,\n          \"position\": null,\n          \"attributeCode\": null,\n          \"elValue\": null,\n          \"isRange\": null,\n          \"allowedValues\": null\n        }\n      ],\n      \"rows\": [\n        {\n          \"priority\": null,\n          \"description\": null,\n          \"values\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"defaultPrice\": 0,\n      \"ratingScript\": \"string\",\n      \"supersede\": true,\n      \"currencyPrices\": [\n        {\n          \"currency\": null,\n          \"price\": null,\n          \"price_fx\": null\n        }\n      ],\n      \"parameter_extra_fx\": \"string\"\n    }\n  ],\n  \"filter_fx\": \"string\",\n  \"sortIndex_fx\": \"string\",\n  \"parameters\": {\n    \"param1\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param2\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    },\n    \"param3\": {\n      \"description\": \"string\",\n      \"format\": \"string\",\n      \"mandatory\": true,\n      \"hidden\": true\n    }\n  },\n  \"oneShotType\": \"string\",\n  \"immediateInvoicing\": true,\n  \"amountEditable\": true,\n  \"subscriptionProrata\": true,\n  \"terminationProrata\": true,\n  \"applyInAdvance\": true,\n  \"anticipateEndOfSubscription\": true,\n  \"chargeApplicationCalendar_fx\": \"string\",\n  \"applyInAdvance_fx\": \"string\",\n  \"subscriptionProrata_fx\": \"string\",\n  \"terminationProrata_fx\": \"string\",\n  \"applyTerminatedChargeToDate_fx\": \"string\",\n  \"prorataOnPriceChange\": true,\n  \"filterParam1\": \"string\",\n  \"filterParam2\": \"string\",\n  \"filterParam3\": \"string\",\n  \"filterParam4\": \"string\",\n  \"priority\": 0,\n  \"triggerNextCharge\": true,\n  \"triggerNextCharge_fx\": \"string\",\n  \"inputUnit_fx\": \"string\",\n  \"outputUnit_fx\": \"string\",\n  \"businessKey_fx\": \"string\",\n  \"businessKeyFormat\": \"string\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"chargeCode\": \"string\",\n  \"counters\": [\n    \"string\"\n  ],\n  \"counterCode\": \"string\",\n  \"accumulatorCounterCodes\": [\n    \"string\"\n  ],\n  \"chargeType\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Remove charge from product",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/charges/:chargeCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "charges",
        ":chargeCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "chargeCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Link commercial rule to product (idempotent)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/commercialRules/:ruleCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "commercialRules",
        ":ruleCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ruleCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Unlink commercial rule from product",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/commercialRules/:ruleCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "commercialRules",
        ":ruleCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ruleCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Link discount plan to product (idempotent)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/discountPlans/:dpCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "discountPlans",
        ":dpCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "dpCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Unlink discount plan from product",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/discountPlans/:dpCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "discountPlans",
        ":dpCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "dpCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Duplicate product",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/duplicate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "duplicate"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Link media to product (idempotent)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/medias/:mediaCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "medias",
        ":mediaCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "mediaCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Unlink media from product",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/medias/:mediaCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "medias",
        ":mediaCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "mediaCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Change product status",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/status",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "status"
       ],
       "query": [
        {
         "key": "status",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "List product versions",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/versions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "versions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Create product version",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/versions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "versions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"currentVersion\": 0,\n  \"shortDescription\": \"string\",\n  \"longDescription\": \"string\",\n  \"status\": \"string\",\n  \"statusDate\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"attributes\": [\n    {\n      \"attribute\": \"string\",\n      \"sequence\": 0,\n      \"mandatory\": true,\n      \"mandatoryWithEl\": \"string\",\n      \"display\": true,\n      \"readOnly\": true,\n      \"defaultValue\": \"string\",\n      \"validationType\": \"string\",\n      \"validationPattern\": \"string\",\n      \"validationLabel\": \"string\",\n      \"attributeId\": 0,\n      \"attributeDescription\": \"string\",\n      \"attributeType\": \"string\",\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"tags\": [\n    \"string\"\n  ],\n  \"unlinkTags\": [\n    \"string\"\n  ],\n  \"removeAttributes\": [\n    \"string\"\n  ],\n  \"validity\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Update product version",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/versions/:ver",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "versions",
        ":ver"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 0,\n  \"currentVersion\": 0,\n  \"shortDescription\": \"string\",\n  \"longDescription\": \"string\",\n  \"status\": \"string\",\n  \"statusDate\": \"string\",\n  \"validFrom\": \"string\",\n  \"validTo\": \"string\",\n  \"attributes\": [\n    {\n      \"attribute\": \"string\",\n      \"sequence\": 0,\n      \"mandatory\": true,\n      \"mandatoryWithEl\": \"string\",\n      \"display\": true,\n      \"readOnly\": true,\n      \"defaultValue\": \"string\",\n      \"validationType\": \"string\",\n      \"validationPattern\": \"string\",\n      \"validationLabel\": \"string\",\n      \"attributeId\": 0,\n      \"attributeDescription\": \"string\",\n      \"attributeType\": \"string\",\n      \"allowedValues\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"tags\": [\n    \"string\"\n  ],\n  \"unlinkTags\": [\n    \"string\"\n  ],\n  \"removeAttributes\": [\n    \"string\"\n  ],\n  \"validity\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Link attribute to product version (idempotent)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/versions/:ver/attributes/:attributeCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "versions",
        ":ver",
        "attributes",
        ":attributeCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        },
        {
         "key": "attributeCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Remove an attribute from a product version",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/versions/:ver/attributes/:attributeCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "versions",
        ":ver",
        "attributes",
        ":attributeCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        },
        {
         "key": "attributeCode",
         "value": ""
        }
       ]
      },
      "description": "Removes a single attribute from a DRAFT product version. Returns 204 on success, 400 if the version is not DRAFT, 404 if the product, version, or attribute is not found."
     }
    },
    {
     "name": "Change product version status",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/versions/:ver/status",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "versions",
        ":ver",
        "status"
       ],
       "query": [
        {
         "key": "status",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        }
       ]
      },
      "description": "Publishing a version auto-closes any open-ended PUBLISHED predecessor at the new version's start date (end-exclusive, contiguous timeline). Returns 409 when the predecessor cannot be closed cleanly (new version has no start date, or starts at or before the predecessor's start)."
     }
    },
    {
     "name": "Link tag to product version (idempotent)",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/versions/:ver/tags/:tagCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "versions",
        ":ver",
        "tags",
        ":tagCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        },
        {
         "key": "tagCode",
         "value": ""
        }
       ]
      }
     }
    },
    {
     "name": "Unlink tag from product version",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/products/:code/versions/:ver/tags/:tagCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "products",
        ":code",
        "versions",
        ":ver",
        "tags",
        ":tagCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "ver",
         "value": ""
        },
        {
         "key": "tagCode",
         "value": ""
        }
       ]
      }
     }
    }
   ]
  },
  {
   "name": "Product Lines",
   "item": [
    {
     "name": "List product lines",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/productLines",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "productLines"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of product lines. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create product line",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/productLines",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "productLines"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MOBILE\",\n  \"description\": \"Mobile products\",\n  \"longDescription\": \"All mobile phone and plan offers\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new product line. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get product line",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/productLines/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "productLines",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single product line by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update product line (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/productLines/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "productLines",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MOBILE\",\n  \"description\": \"Mobile products\",\n  \"longDescription\": \"All mobile phone and plan offers\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the product line if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update product line",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/productLines/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "productLines",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MOBILE\",\n  \"description\": \"Mobile products\",\n  \"longDescription\": \"All mobile phone and plan offers\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing product line. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete product line",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/productLines/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "productLines",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the product line identified by the code."
     }
    }
   ]
  },
  {
   "name": "Commercial Rules",
   "item": [
    {
     "name": "List commercial rules",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/commercialRules",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "commercialRules"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "ruleType",
         "value": "",
         "disabled": true
        },
        {
         "key": "targetType",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of commercial rules, optionally filtered by code, rule type, and target type. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create commercial rule",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/commercialRules",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "commercialRules"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"REQ_DATA_PLAN\",\n  \"description\": \"string\",\n  \"ruleType\": \"PRE_REQUISITE\",\n  \"scopeType\": \"string\",\n  \"targetProduct\": \"string\",\n  \"targetOfferTemplate\": \"string\",\n  \"targetAttribute\": \"string\",\n  \"rule_fx\": \"string\",\n  \"disabled\": false,\n  \"items\": [\n    {\n      \"operator\": \"AND\",\n      \"lines\": [\n        {\n          \"sourceProduct\": null,\n          \"sourceOfferTemplate\": null,\n          \"sourceAttribute\": null,\n          \"targetProduct\": null,\n          \"targetOfferTemplate\": null,\n          \"targetAttribute\": null\n        }\n      ]\n    }\n  ],\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new commercial rule. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get commercial rule",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/commercialRules/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "commercialRules",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single commercial rule by its code or numeric technical id, including its items and lines."
     }
    },
    {
     "name": "Create or update commercial rule (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/commercialRules/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "commercialRules",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"REQ_DATA_PLAN\",\n  \"description\": \"string\",\n  \"ruleType\": \"PRE_REQUISITE\",\n  \"scopeType\": \"string\",\n  \"targetProduct\": \"string\",\n  \"targetOfferTemplate\": \"string\",\n  \"targetAttribute\": \"string\",\n  \"rule_fx\": \"string\",\n  \"disabled\": false,\n  \"items\": [\n    {\n      \"operator\": \"AND\",\n      \"lines\": [\n        {\n          \"sourceProduct\": null,\n          \"sourceOfferTemplate\": null,\n          \"sourceAttribute\": null,\n          \"targetProduct\": null,\n          \"targetOfferTemplate\": null,\n          \"targetAttribute\": null\n        }\n      ]\n    }\n  ],\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the rule if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update commercial rule",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/commercialRules/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "commercialRules",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"REQ_DATA_PLAN\",\n  \"description\": \"string\",\n  \"ruleType\": \"PRE_REQUISITE\",\n  \"scopeType\": \"string\",\n  \"targetProduct\": \"string\",\n  \"targetOfferTemplate\": \"string\",\n  \"targetAttribute\": \"string\",\n  \"rule_fx\": \"string\",\n  \"disabled\": false,\n  \"items\": [\n    {\n      \"operator\": \"AND\",\n      \"lines\": [\n        {\n          \"sourceProduct\": null,\n          \"sourceOfferTemplate\": null,\n          \"sourceAttribute\": null,\n          \"targetProduct\": null,\n          \"targetOfferTemplate\": null,\n          \"targetAttribute\": null\n        }\n      ]\n    }\n  ],\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing commercial rule. Partial-update semantics: a null field keeps the stored value, an empty string or empty array clears it."
     }
    },
    {
     "name": "Delete commercial rule",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/commercialRules/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "commercialRules",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the commercial rule identified by the code."
     }
    }
   ]
  },
  {
   "name": "Script Instances",
   "item": [
    {
     "name": "List script instances",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/scriptInstances",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "scriptInstances"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of script instances. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create script instance",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/scriptInstances",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "scriptInstances"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"org.billerang.script.MyScript\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"category\": \"BILLING\",\n  \"script\": \"string\",\n  \"sourceTypeEnum\": \"JAVA\",\n  \"scriptParameters\": [\n    {\n      \"code\": \"invoiceCode\",\n      \"className\": \"java.lang.String\",\n      \"defaultValue\": \"string\",\n      \"mandatory\": false,\n      \"allowedValues\": \"string\",\n      \"valuesSeparator\": \"\\\\|\",\n      \"collection\": false\n    }\n  ],\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates and compiles a new script instance. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201 whether or not compilation succeeds — the script instance is persisted either way. When compilation fails, the response body's compilationErrors list is populated (lineNumber/columnNumber/message), mirroring the legacy createOrUpdateWithCompile contract; this is not a 4xx."
     }
    },
    {
     "name": "Get script instance",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/scriptInstances/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "scriptInstances",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single script instance by its code or numeric technical id, including its source."
     }
    },
    {
     "name": "Create or update script instance (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/scriptInstances/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "scriptInstances",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"org.billerang.script.MyScript\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"category\": \"BILLING\",\n  \"script\": \"string\",\n  \"sourceTypeEnum\": \"JAVA\",\n  \"scriptParameters\": [\n    {\n      \"code\": \"invoiceCode\",\n      \"className\": \"java.lang.String\",\n      \"defaultValue\": \"string\",\n      \"mandatory\": false,\n      \"allowedValues\": \"string\",\n      \"valuesSeparator\": \"\\\\|\",\n      \"collection\": false\n    }\n  ],\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates and compiles the script if absent, otherwise updates and recompiles it. Returns 200 whether or not compilation succeeds — the script instance is persisted either way. When compilation fails, the response body's compilationErrors list is populated (lineNumber/columnNumber/message), mirroring the legacy createOrUpdateWithCompile contract; this is not a 4xx."
     }
    },
    {
     "name": "Update script instance",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/scriptInstances/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "scriptInstances",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"org.billerang.script.MyScript\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"category\": \"BILLING\",\n  \"script\": \"string\",\n  \"sourceTypeEnum\": \"JAVA\",\n  \"scriptParameters\": [\n    {\n      \"code\": \"invoiceCode\",\n      \"className\": \"java.lang.String\",\n      \"defaultValue\": \"string\",\n      \"mandatory\": false,\n      \"allowedValues\": \"string\",\n      \"valuesSeparator\": \"\\\\|\",\n      \"collection\": false\n    }\n  ],\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing script instance. Partial-update semantics: a null field keeps the stored value, an empty string clears it. Recompiles the script; when compilation fails, the response body's compilationErrors list is populated (lineNumber/columnNumber/message) but the update is still persisted and 200 is returned, not a 4xx."
     }
    },
    {
     "name": "Delete script instance",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/scriptInstances/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "scriptInstances",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the script instance identified by the code."
     }
    },
    {
     "name": "Execute a script instance",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/scriptInstances/:code/executions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "scriptInstances",
        ":code",
        "executions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Runs the named script with the request body as its execution context. Every top-level entry of the body becomes a context parameter. Returns 200 with the resulting context map (service-injected and non-JSON-serializable keys removed), 404 when the script does not exist, and 422 when the script raises an error at runtime."
     }
    },
    {
     "name": "Get script instance source",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/scriptInstances/:code/source",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "scriptInstances",
        ":code",
        "source"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns the raw source of the script as plain text."
     }
    },
    {
     "name": "Set script instance source (XML)",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/scriptInstances/:code/source",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "scriptInstances",
        ":code",
        "source"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Stores and recompiles the script from an XML body. Returns a result with any compilation errors."
     }
    }
   ]
  },
  {
   "name": "Tags",
   "item": [
    {
     "name": "List tags",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tags",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tags"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of tags. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create tag",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tags",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tags"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"PROMO\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new tag. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get tag",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tags/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tags",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single tag by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update tag (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tags/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tags",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"PROMO\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the tag if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update tag",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tags/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tags",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"PROMO\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing tag. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete tag",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tags/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tags",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the tag identified by the code."
     }
    }
   ]
  },
  {
   "name": "Tax Classes",
   "item": [
    {
     "name": "List tax classes",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/taxClasses",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxClasses"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of tax classes. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create tax class",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/taxClasses",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxClasses"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"STANDARD\",\n  \"description\": \"Standard VAT class\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new tax class. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get tax class",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/taxClasses/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxClasses",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single tax class by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update tax class (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/taxClasses/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxClasses",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"STANDARD\",\n  \"description\": \"Standard VAT class\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the tax class if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update tax class",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/taxClasses/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxClasses",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"STANDARD\",\n  \"description\": \"Standard VAT class\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing tax class. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete tax class",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/taxClasses/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "taxClasses",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the tax class identified by the code. Fails if it is still referenced by charges or tax mappings."
     }
    }
   ]
  },
  {
   "name": "Termination Reasons",
   "item": [
    {
     "name": "List termination reasons",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/terminationReasons",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "terminationReasons"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of termination reasons. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create termination reason",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/terminationReasons",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "terminationReasons"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"CUSTOMER_REQUEST\",\n  \"description\": \"string\",\n  \"applyRecurringChargesUpToCommitmentEndDate\": false,\n  \"applyTerminationPenaltyCharges\": true,\n  \"prorata\": \"PRORATA\",\n  \"reimbursePrepaidRecurringCharges\": true,\n  \"reimburseOneShotSetupFees\": false,\n  \"generateImmediateInvoice\": false,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new termination reason. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get termination reason",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/terminationReasons/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "terminationReasons",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single termination reason by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update termination reason (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/terminationReasons/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "terminationReasons",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"CUSTOMER_REQUEST\",\n  \"description\": \"string\",\n  \"applyRecurringChargesUpToCommitmentEndDate\": false,\n  \"applyTerminationPenaltyCharges\": true,\n  \"prorata\": \"PRORATA\",\n  \"reimbursePrepaidRecurringCharges\": true,\n  \"reimburseOneShotSetupFees\": false,\n  \"generateImmediateInvoice\": false,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the reason if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update termination reason",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/terminationReasons/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "terminationReasons",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"CUSTOMER_REQUEST\",\n  \"description\": \"string\",\n  \"applyRecurringChargesUpToCommitmentEndDate\": false,\n  \"applyTerminationPenaltyCharges\": true,\n  \"prorata\": \"PRORATA\",\n  \"reimbursePrepaidRecurringCharges\": true,\n  \"reimburseOneShotSetupFees\": false,\n  \"generateImmediateInvoice\": false,\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing termination reason. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete termination reason",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/terminationReasons/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "terminationReasons",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the termination reason identified by the code."
     }
    }
   ]
  },
  {
   "name": "Unit Of Measures",
   "item": [
    {
     "name": "List unit of measures",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/unitOfMeasures",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "unitOfMeasures"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of units of measure. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Create unit of measure",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/unitOfMeasures",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "unitOfMeasures"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"GB\",\n  \"description\": \"Gigabyte\",\n  \"symbol\": \"GB\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new unit of measure. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get unit of measure",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/unitOfMeasures/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "unitOfMeasures",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single unit of measure by its code or numeric technical id."
     }
    },
    {
     "name": "Create or update unit of measure (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/unitOfMeasures/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "unitOfMeasures",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"GB\",\n  \"description\": \"Gigabyte\",\n  \"symbol\": \"GB\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Creates the unit if absent, otherwise updates it. Returns 200."
     }
    },
    {
     "name": "Update unit of measure",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/unitOfMeasures/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "unitOfMeasures",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"GB\",\n  \"description\": \"Gigabyte\",\n  \"symbol\": \"GB\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing unit of measure. Partial-update semantics: a null field keeps the stored value, an empty string clears it."
     }
    },
    {
     "name": "Delete unit of measure",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/unitOfMeasures/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "unitOfMeasures",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the unit of measure identified by the code. Fails if it is still referenced by charges."
     }
    }
   ]
  },
  {
   "name": "Customer Brands",
   "item": [
    {
     "name": "List customer brands",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customerBrands",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerBrands"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of customer brands. Filter by exact code or by description substring. Results are ordered by the sortBy/sortOrder parameters (code ascending by default). Read-only."
     }
    },
    {
     "name": "Create a customer brand",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customerBrands",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerBrands"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ACME\",\n  \"description\": \"Acme Retail\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new customer brand. The code must be unique; a clashing code returns 409. Use POST /{code} instead if you want create-or-update (upsert) semantics."
     }
    },
    {
     "name": "Get one customer brand",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customerBrands/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerBrands",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single customer brand by its functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update a customer brand (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customerBrands/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerBrands",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ACME\",\n  \"description\": \"Acme Retail\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the brand if it does not exist, otherwise updates it in place. Safe to retry. The path code wins over any code in the body."
     }
    },
    {
     "name": "Update a customer brand",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customerBrands/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerBrands",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ACME\",\n  \"description\": \"Acme Retail\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing brand identified by code. Partial-update semantics: a null or absent field keeps the current value, an empty value for the field type clears it. The brand must already exist."
     }
    },
    {
     "name": "Delete a customer brand",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customerBrands/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerBrands",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the brand identified by code. Fails if customers still reference it (409). Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Customer Categories",
   "item": [
    {
     "name": "List customer categories",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customerCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerCategories"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of customer categories, filterable by exact code or description substring, ordered by sortBy/sortOrder (code ascending by default). Read-only."
     }
    },
    {
     "name": "Create a customer category",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customerCategories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerCategories"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MARKETPLACE_ACCOUNTS\",\n  \"description\": \"Marketplace accounts\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"accountingCode\": \"411000\",\n  \"exoneratedFromTaxes\": false,\n  \"exonerationTaxEl\": \"string\",\n  \"exonerationReason\": \"string\",\n  \"taxCategoryCode\": \"NORMAL\",\n  \"taxCategoryEl\": \"string\",\n  \"defaultSellerCode\": \"MAIN_SELLER\",\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new customer category. The referenced tax category and default seller must already exist. A duplicate code returns 409. Use POST /{code} for upsert semantics."
     }
    },
    {
     "name": "Get one customer category",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customerCategories/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerCategories",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single customer category by functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update a customer category (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customerCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MARKETPLACE_ACCOUNTS\",\n  \"description\": \"Marketplace accounts\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"accountingCode\": \"411000\",\n  \"exoneratedFromTaxes\": false,\n  \"exonerationTaxEl\": \"string\",\n  \"exonerationReason\": \"string\",\n  \"taxCategoryCode\": \"NORMAL\",\n  \"taxCategoryEl\": \"string\",\n  \"defaultSellerCode\": \"MAIN_SELLER\",\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the category if absent, otherwise updates it. Safe to retry. The path code wins over any code in the body."
     }
    },
    {
     "name": "Update a customer category",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customerCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MARKETPLACE_ACCOUNTS\",\n  \"description\": \"Marketplace accounts\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"accountingCode\": \"411000\",\n  \"exoneratedFromTaxes\": false,\n  \"exonerationTaxEl\": \"string\",\n  \"exonerationReason\": \"string\",\n  \"taxCategoryCode\": \"NORMAL\",\n  \"taxCategoryEl\": \"string\",\n  \"defaultSellerCode\": \"MAIN_SELLER\",\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing category by code. Partial-update semantics: null or absent keeps the current value, empty value for the type clears it. The category must already exist."
     }
    },
    {
     "name": "Delete a customer category",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customerCategories/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customerCategories",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the category identified by code. Fails with 409 if customers still reference it. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Titles",
   "item": [
    {
     "name": "List titles",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/titles",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "titles"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of titles, filterable by exact code or description substring, ordered by sortBy/sortOrder (code ascending by default). Read-only."
     }
    },
    {
     "name": "Create a title",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/titles",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "titles"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MR\",\n  \"description\": \"Mister\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"isCompany\": false,\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new title. A duplicate code returns 409. Use POST /{code} for upsert semantics."
     }
    },
    {
     "name": "Get one title",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/titles/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "titles",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single title by functional code or numeric id. Read-only."
     }
    },
    {
     "name": "Create or update a title (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/titles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "titles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MR\",\n  \"description\": \"Mister\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"isCompany\": false,\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the title if absent, otherwise updates it. Safe to retry. The path code wins over any code in the body."
     }
    },
    {
     "name": "Update a title",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/titles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "titles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MR\",\n  \"description\": \"Mister\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"isCompany\": false,\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing title by code. Partial-update semantics: null or absent keeps the current value, empty value for the type clears it. The title must already exist."
     }
    },
    {
     "name": "Delete a title",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/titles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "titles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the title identified by code. Fails with 409 if accounts still reference it. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Code Generators",
   "item": [
    {
     "name": "Generate the next code for an entity class",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/codeGenerators/generation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "codeGenerators",
        "generation"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"formatEL\": \"string\",\n  \"entityClass\": \"string\",\n  \"prefixOverride\": \"string\",\n  \"sequenceDto\": {\n    \"id\": 0,\n    \"sequenceType\": \"SEQUENCE\",\n    \"code\": \"string\",\n    \"size\": 0,\n    \"currentNumber\": 0,\n    \"pattern\": \"string\"\n  },\n  \"id\": 0,\n  \"sequence\": {\n    \"id\": 0,\n    \"sequenceType\": \"SEQUENCE\",\n    \"code\": \"string\",\n    \"size\": 0,\n    \"currentNumber\": 0,\n    \"pattern\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Advances the generator for the entity class described in the body and returns the freshly generated code. This is a stateful action: it consumes a sequence value."
     }
    },
    {
     "name": "Get the code generator configured for an entity class",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/codeGenerators/:entityClass",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "codeGenerators",
        ":entityClass"
       ],
       "variable": [
        {
         "key": "entityClass",
         "value": ""
        }
       ]
      },
      "description": "Returns the generator configuration bound to the given entity class, or 404 when none is configured."
     }
    },
    {
     "name": "Create or update the code generator for an entity class (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/codeGenerators/:entityClass",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "codeGenerators",
        ":entityClass"
       ],
       "variable": [
        {
         "key": "entityClass",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"formatEL\": \"string\",\n  \"entityClass\": \"string\",\n  \"prefixOverride\": \"string\",\n  \"sequenceDto\": {\n    \"id\": 0,\n    \"sequenceType\": \"SEQUENCE\",\n    \"code\": \"string\",\n    \"size\": 0,\n    \"currentNumber\": 0,\n    \"pattern\": \"string\"\n  },\n  \"id\": 0,\n  \"sequence\": {\n    \"id\": 0,\n    \"sequenceType\": \"SEQUENCE\",\n    \"code\": \"string\",\n    \"size\": 0,\n    \"currentNumber\": 0,\n    \"pattern\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the entity class in the path. Creates the generator if absent, otherwise updates it. Returns 200 with the saved configuration."
     }
    }
   ]
  },
  {
   "name": "Custom Field Definitions",
   "item": [
    {
     "name": "List custom field definitions for an entity",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customFieldDefinitions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customFieldDefinitions"
       ],
       "query": [
        {
         "key": "appliesTo",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns all custom field templates whose appliesTo matches the given target. appliesTo accepts a resolved entity name, a CE_<code> for a custom object, or a legacy short prefix alias."
     }
    },
    {
     "name": "Discover customizable entity targets",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customFieldDefinitions/targets",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customFieldDefinitions",
        "targets"
       ]
      },
      "description": "Lists the entity targets that can carry custom fields, so a client can populate an appliesTo selector."
     }
    },
    {
     "name": "Get one custom field definition",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customFieldDefinitions/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customFieldDefinitions",
        ":code"
       ],
       "query": [
        {
         "key": "appliesTo",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single CFT by its code, scoped by appliesTo. Both are needed because the same code can exist on different targets."
     }
    },
    {
     "name": "Create or update a custom field definition (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customFieldDefinitions/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customFieldDefinitions",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"updatedCode\": \"string\",\n  \"disabled\": true,\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"fieldType\": \"STRING\",\n  \"accountLevel\": \"string\",\n  \"appliesTo\": \"string\",\n  \"defaultValue\": \"string\",\n  \"useInheritedAsDefaultValue\": true,\n  \"storageType\": \"SINGLE\",\n  \"valueRequired\": true,\n  \"uniqueConstraint\": true,\n  \"versionable\": true,\n  \"triggerEndPeriodEvent\": true,\n  \"calendar\": \"string\",\n  \"cacheValueTimeperiod\": 0,\n  \"entityClazz\": \"string\",\n  \"listValues\": {},\n  \"allowEdit\": true,\n  \"hideOnNew\": true,\n  \"maxValue\": 0,\n  \"minValue\": 0,\n  \"regExp\": \"string\",\n  \"cacheValue\": true,\n  \"nbDecimal\": 0,\n  \"roundingMode\": \"NEAREST\",\n  \"guiPosition\": \"string\",\n  \"mapKeyType\": \"STRING\",\n  \"applicableOnEl\": \"string\",\n  \"matrixColumns\": [\n    {\n      \"id\": 0,\n      \"columnUse\": \"USE_KEY\",\n      \"position\": 0,\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"keyType\": \"STRING\"\n    }\n  ],\n  \"childEntityFieldsForSummary\": [\n    \"string\"\n  ],\n  \"indexType\": \"STORE_ONLY\",\n  \"tags\": \"string\",\n  \"displayFormat\": \"string\",\n  \"customTableCodeEL\": \"string\",\n  \"dataFilterEL\": \"string\",\n  \"fieldsEL\": \"string\",\n  \"versionFilterEL\": \"string\",\n  \"anonymize\": true,\n  \"referenceTable\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the CFT code in the path. Creates the template if absent, otherwise updates it. appliesTo comes from the body. Returns 200 with the saved template."
     }
    },
    {
     "name": "Partially update a custom field definition",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customFieldDefinitions/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customFieldDefinitions",
        ":code"
       ],
       "query": [
        {
         "key": "appliesTo",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"updatedCode\": \"string\",\n  \"disabled\": true,\n  \"languageDescriptions\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"fieldType\": \"STRING\",\n  \"accountLevel\": \"string\",\n  \"appliesTo\": \"string\",\n  \"defaultValue\": \"string\",\n  \"useInheritedAsDefaultValue\": true,\n  \"storageType\": \"SINGLE\",\n  \"valueRequired\": true,\n  \"uniqueConstraint\": true,\n  \"versionable\": true,\n  \"triggerEndPeriodEvent\": true,\n  \"calendar\": \"string\",\n  \"cacheValueTimeperiod\": 0,\n  \"entityClazz\": \"string\",\n  \"listValues\": {},\n  \"allowEdit\": true,\n  \"hideOnNew\": true,\n  \"maxValue\": 0,\n  \"minValue\": 0,\n  \"regExp\": \"string\",\n  \"cacheValue\": true,\n  \"nbDecimal\": 0,\n  \"roundingMode\": \"NEAREST\",\n  \"guiPosition\": \"string\",\n  \"mapKeyType\": \"STRING\",\n  \"applicableOnEl\": \"string\",\n  \"matrixColumns\": [\n    {\n      \"id\": 0,\n      \"columnUse\": \"USE_KEY\",\n      \"position\": 0,\n      \"code\": \"string\",\n      \"label\": \"string\",\n      \"keyType\": \"STRING\"\n    }\n  ],\n  \"childEntityFieldsForSummary\": [\n    \"string\"\n  ],\n  \"indexType\": \"STORE_ONLY\",\n  \"tags\": \"string\",\n  \"displayFormat\": \"string\",\n  \"customTableCodeEL\": \"string\",\n  \"dataFilterEL\": \"string\",\n  \"fieldsEL\": \"string\",\n  \"versionFilterEL\": \"string\",\n  \"anonymize\": true,\n  \"referenceTable\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing CFT scoped by appliesTo, applying partial-update semantics: a null field keeps the stored value. Returns 404 when the CFT does not exist on the target."
     }
    },
    {
     "name": "Delete a custom field definition",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customFieldDefinitions/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customFieldDefinitions",
        ":code"
       ],
       "query": [
        {
         "key": "appliesTo",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the CFT identified by code and appliesTo. Stored values in cf_values for that field are no longer surfaced."
     }
    },
    {
     "name": "Activate a custom field definition",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customFieldDefinitions/:code/activation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customFieldDefinitions",
        ":code",
        "activation"
       ],
       "query": [
        {
         "key": "appliesTo",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Enables the CFT identified by code and appliesTo (sets disabled=false). Returns the resulting template."
     }
    },
    {
     "name": "Deactivate a custom field definition",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customFieldDefinitions/:code/deactivation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customFieldDefinitions",
        ":code",
        "deactivation"
       ],
       "query": [
        {
         "key": "appliesTo",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Disables the CFT identified by code and appliesTo (sets disabled=true). Returns the resulting template."
     }
    }
   ]
  },
  {
   "name": "Custom Objects",
   "item": [
    {
     "name": "List custom objects",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "name",
         "value": "",
         "disabled": true
        },
        {
         "key": "showInSidebar",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of custom object definitions. Filters are exact-match and combine with AND."
     }
    },
    {
     "name": "Get one custom object",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single custom object definition, including its field schema."
     }
    },
    {
     "name": "Create or update a custom object (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"Transaction\",\n  \"name\": \"Transaction\",\n  \"description\": \"string\",\n  \"storeAsTable\": true,\n  \"storeInES\": false,\n  \"disableable\": true,\n  \"disabled\": false,\n  \"showInSidebar\": true,\n  \"sidebarIcon\": \"string\",\n  \"sidebarLabel\": \"string\",\n  \"sidebarOrder\": 0,\n  \"fields\": [\n    {\n      \"code\": \"amount\",\n      \"name\": \"Amount\",\n      \"description\": \"string\",\n      \"fieldType\": \"DOUBLE\",\n      \"storageType\": \"SINGLE\",\n      \"valueRequired\": true,\n      \"uniqueConstraint\": false,\n      \"defaultValue\": \"string\",\n      \"maxLength\": 255,\n      \"listValues\": {},\n      \"guiPosition\": \"string\",\n      \"versionable\": false,\n      \"entityClazz\": \"org.meveo.model.billing.Subscription\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the object code in the path. Creates the definition if absent, otherwise updates it, including its declared fields. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Delete a custom object",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code?deleteRecords=false",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ],
       "query": [
        {
         "key": "deleteRecords",
         "value": "false",
         "description": "Delete the object's records along with it. Without it, an object that still holds records is not deleted."
        }
       ]
      },
      "description": "Removes the custom object definition together with everything generated for it: its fields, its actions and the two permission roles named after its code. Records are business data, so the call is refused with 409 while any record still exists: delete them first, or repeat the call with deleteRecords=true to delete the object together with every record it holds. The count covers both stores a custom object can use, its own table for a store-as-table object and the shared record table otherwise."
     }
    },
    {
     "name": "List custom-entity actions",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/actions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "actions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns the custom-entity actions (scripted buttons) declared for the object, whose appliesTo is CE_<code>."
     }
    },
    {
     "name": "Create or update a custom-entity action (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/actions/:actionCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "actions",
        ":actionCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "actionCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"updatedCode\": \"string\",\n  \"disabled\": true,\n  \"appliesTo\": \"string\",\n  \"applicableOnEl\": \"string\",\n  \"label\": \"string\",\n  \"labelsTranslated\": [\n    {\n      \"languageCode\": \"string\",\n      \"description\": \"string\"\n    }\n  ],\n  \"script\": {\n    \"id\": 0,\n    \"code\": \"string\",\n    \"description\": \"string\",\n    \"updatedCode\": \"string\",\n    \"disabled\": true,\n    \"type\": \"JAVA\",\n    \"reuse\": true,\n    \"script\": \"string\",\n    \"pool\": {\n      \"usePool\": true,\n      \"min\": 0,\n      \"max\": 0,\n      \"maxIdleTime\": 0\n    },\n    \"executionRoles\": [\n      \"string\"\n    ],\n    \"sourcingRoles\": [\n      \"string\"\n    ],\n    \"scriptInstanceCategoryCode\": \"string\",\n    \"languageDescriptions\": [\n      {\n        \"languageCode\": \"string\",\n        \"description\": \"string\"\n      }\n    ],\n    \"scriptParameters\": [\n      {\n        \"id\": 0,\n        \"className\": \"string\",\n        \"defaultValue\": \"string\",\n        \"mandatory\": true,\n        \"allowedValues\": \"string\",\n        \"valuesSeparator\": \"string\",\n        \"collection\": true,\n        \"languageDescriptions\": [\n          null\n        ],\n        \"filters\": {}\n      }\n    ],\n    \"codeOnly\": true\n  },\n  \"guiPosition\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert of a custom-entity action keyed on the action code within the object. Returns 200."
     }
    },
    {
     "name": "Delete a custom-entity action",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/actions/:actionCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "actions",
        ":actionCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "actionCode",
         "value": ""
        }
       ]
      },
      "description": "Removes a custom-entity action from the object."
     }
    },
    {
     "name": "Activate a custom-entity action",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/actions/:actionCode/activation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "actions",
        ":actionCode",
        "activation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "actionCode",
         "value": ""
        }
       ]
      },
      "description": "Enables the custom-entity action (sets disabled=false). Returns a status envelope."
     }
    },
    {
     "name": "Deactivate a custom-entity action",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/actions/:actionCode/deactivation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "actions",
        ":actionCode",
        "deactivation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "actionCode",
         "value": ""
        }
       ]
      },
      "description": "Disables the custom-entity action (sets disabled=true). Returns a status envelope."
     }
    },
    {
     "name": "Execute a custom-entity action against a record",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/actions/:actionCode/executions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "actions",
        ":actionCode",
        "executions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "actionCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"entityCode\": \"TX01\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Runs the scripted action against the record named in the body and returns the script result. Modeled as a noun-form execution sub-resource."
     }
    },
    {
     "name": "List fields of a custom object",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/fields",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "fields"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns the field schema (custom field templates) declared on the custom object."
     }
    },
    {
     "name": "Create or update a custom object field (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/fields/:fieldCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "fields",
        ":fieldCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "fieldCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"amount\",\n  \"name\": \"Amount\",\n  \"description\": \"string\",\n  \"fieldType\": \"DOUBLE\",\n  \"storageType\": \"SINGLE\",\n  \"valueRequired\": true,\n  \"uniqueConstraint\": false,\n  \"defaultValue\": \"string\",\n  \"maxLength\": 255,\n  \"listValues\": {},\n  \"guiPosition\": \"string\",\n  \"versionable\": false,\n  \"entityClazz\": \"org.meveo.model.billing.Subscription\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert of a field keyed on the field code within the object. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Delete a custom object field",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/fields/:fieldCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "fields",
        ":fieldCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "fieldCode",
         "value": ""
        }
       ]
      },
      "description": "Removes a field from the object schema."
     }
    },
    {
     "name": "List records of a custom object",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/records",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "records"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns a paginated list of records for the custom object. Additional query parameters are interpreted as field filters against the record's custom values."
     }
    },
    {
     "name": "Create a record",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/records",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "records"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"TX01\",\n  \"description\": \"Smoke test\",\n  \"disabled\": false,\n  \"values\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new record for the custom object. Fails if a record with the same code already exists; use PUT /{code}/records/{recordCode} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get a record",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/records/:recordCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "records",
        ":recordCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "recordCode",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single record by its code, in the flat wire shape (built-in fields plus custom values)."
     }
    },
    {
     "name": "Upsert a record by code",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/records/:recordCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "records",
        ":recordCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "recordCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"TX01\",\n  \"description\": \"Smoke test\",\n  \"disabled\": false,\n  \"values\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates or updates a record keyed on the record code in the path. Custom values follow v1 null/empty semantics: null keeps the stored value, an empty-for-type value clears it. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Delete a record",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customObjects/:code/records/:recordCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customObjects",
        ":code",
        "records",
        ":recordCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "recordCode",
         "value": ""
        }
       ]
      },
      "description": "Removes a single record of the custom object."
     }
    }
   ]
  },
  {
   "name": "Files",
   "item": [
    {
     "name": "Download a file by path",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/files/download",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "files",
        "download"
       ],
       "query": [
        {
         "key": "path",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Streams the file at the given path within the provider file root as an octet stream. Rejects paths that escape the root and returns 404 when the file does not exist."
     }
    }
   ]
  },
  {
   "name": "Formulas",
   "item": [
    {
     "name": "List formula contexts",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/formulas/contexts",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "formulas",
        "contexts"
       ]
      },
      "description": "Returns a summary of every evaluation context the editor supports."
     }
    },
    {
     "name": "Get a formula context",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/formulas/contexts/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "formulas",
        "contexts",
        ":id"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Returns the full context: available variables, declared return type, helper groups, and examples."
     }
    },
    {
     "name": "Preview a formula",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/formulas/evaluate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "formulas",
        "evaluate"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"contextId\": \"charge.price_fx\",\n  \"expression\": \"quantity * unitPrice\",\n  \"sampleValues\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Evaluates a formula against sample values and returns the result, its runtime type, the declared return type, and any helper calls that could not run without real entities."
     }
    },
    {
     "name": "Resolve a field binding",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/formulas/fields",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "formulas",
        "fields"
       ],
       "query": [
        {
         "key": "entity",
         "value": "",
         "disabled": true
        },
        {
         "key": "field",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Maps an entity field (e.g. ChargeTemplate/price_fx) to its evaluation context and return type, so the editor knows which context to lint against."
     }
    },
    {
     "name": "List helper functions",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/formulas/functions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "formulas",
        "functions"
       ]
      },
      "description": "Returns the br:/blrg: helper function catalog."
     }
    },
    {
     "name": "Validate a formula",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/formulas/validate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "formulas",
        "validate"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"contextId\": \"charge.price_fx\",\n  \"expression\": \"quantity * unitPrice\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Compiles and lints a formula against its context. Returns validity, errors and warnings with 1-based editor positions, and the declared return type. Does not evaluate against data."
     }
    }
   ]
  },
  {
   "name": "Job Instances",
   "item": [
    {
     "name": "List job instances",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/jobInstances",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobInstances"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "jobCategory",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of job instances, optionally filtered by code or job category."
     }
    },
    {
     "name": "Create job instance",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/jobInstances",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobInstances"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"INVOICING_MAIN\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"jobTemplate\": \"InvoicingJob\",\n  \"jobCategory\": \"INVOICING\",\n  \"followingJob\": \"string\",\n  \"processNextJobOnError\": false,\n  \"timerCode\": \"string\",\n  \"runOnNodes\": \"string\",\n  \"clusterBehavior\": \"string\",\n  \"verboseReport\": false,\n  \"jobStatusReportFrequency\": 0,\n  \"limitToNrOfNodes\": 0,\n  \"parameter\": \"threadCount=4\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new job instance. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "List job categories",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/jobInstances/categories",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobInstances",
        "categories"
       ]
      },
      "description": "Returns the static set of job categories from MeveoJobCategoryEnum."
     }
    },
    {
     "name": "Get job instance",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/jobInstances/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobInstances",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single job instance by its code, including custom fields and audit metadata."
     }
    },
    {
     "name": "Create-or-update job instance (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/jobInstances/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobInstances",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"INVOICING_MAIN\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"jobTemplate\": \"InvoicingJob\",\n  \"jobCategory\": \"INVOICING\",\n  \"followingJob\": \"string\",\n  \"processNextJobOnError\": false,\n  \"timerCode\": \"string\",\n  \"runOnNodes\": \"string\",\n  \"clusterBehavior\": \"string\",\n  \"verboseReport\": false,\n  \"jobStatusReportFrequency\": 0,\n  \"limitToNrOfNodes\": 0,\n  \"parameter\": \"threadCount=4\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Returns 201 when it creates a new instance and 200 when it updates an existing one."
     }
    },
    {
     "name": "Update job instance",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/jobInstances/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobInstances",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"INVOICING_MAIN\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"jobTemplate\": \"InvoicingJob\",\n  \"jobCategory\": \"INVOICING\",\n  \"followingJob\": \"string\",\n  \"processNextJobOnError\": false,\n  \"timerCode\": \"string\",\n  \"runOnNodes\": \"string\",\n  \"clusterBehavior\": \"string\",\n  \"verboseReport\": false,\n  \"jobStatusReportFrequency\": 0,\n  \"limitToNrOfNodes\": 0,\n  \"parameter\": \"threadCount=4\",\n  \"customFields\": {},\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Partial update. A null field keeps the existing value; an empty-for-type value clears it. code is immutable. Returns 200 with the updated instance."
     }
    },
    {
     "name": "Delete job instance",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/jobInstances/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobInstances",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the job instance identified by the code."
     }
    },
    {
     "name": "Execute a job instance",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/jobInstances/:code/executions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobInstances",
        ":code",
        "executions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"forceExecution\": false,\n  \"runOnNodes\": \"string\",\n  \"parameters\": \"string\",\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Triggers a run of the job instance identified by the code. The optional body carries execution options (forceExecution, runOnNodes, parameters, customFields). customFields is a flat code-to-value map applied as run-time overrides for this execution only; it does not persist to the job instance's stored custom field values. Returns 202 Accepted with the execution id and initial status. Modeled as a noun-form execution sub-resource."
     }
    },
    {
     "name": "Interrupt a running job instance",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/jobInstances/:code/interruption",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobInstances",
        ":code",
        "interruption"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Requests the running job to stop (delegates JobApi.stopJob). Idempotent: interrupting a job that is not running is a no-op success. Modeled as a noun-form action sub-resource."
     }
    }
   ]
  },
  {
   "name": "Timers",
   "item": [
    {
     "name": "List timers",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/timers",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "timers"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of timers, optionally filtered by code."
     }
    },
    {
     "name": "Create timer",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/timers",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "timers"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"NIGHTLY\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"hour\": \"2\",\n  \"minute\": \"0\",\n  \"second\": \"0\",\n  \"year\": \"*\",\n  \"month\": \"*\",\n  \"dayOfMonth\": \"*\",\n  \"dayOfWeek\": \"*\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new timer. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get timer",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/timers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "timers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single timer by its code."
     }
    },
    {
     "name": "Create-or-update timer (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/timers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "timers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"NIGHTLY\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"hour\": \"2\",\n  \"minute\": \"0\",\n  \"second\": \"0\",\n  \"year\": \"*\",\n  \"month\": \"*\",\n  \"dayOfMonth\": \"*\",\n  \"dayOfWeek\": \"*\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. Returns 201 when it creates a new timer and 200 when it updates an existing one."
     }
    },
    {
     "name": "Update timer",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/timers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "timers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"NIGHTLY\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"hour\": \"2\",\n  \"minute\": \"0\",\n  \"second\": \"0\",\n  \"year\": \"*\",\n  \"month\": \"*\",\n  \"dayOfMonth\": \"*\",\n  \"dayOfWeek\": \"*\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Partial update. A null field keeps the existing value. code is immutable. Returns 200 with the updated timer."
     }
    },
    {
     "name": "Delete timer",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/timers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "timers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the timer identified by the code. Fails if a job instance still references it."
     }
    }
   ]
  },
  {
   "name": "Job Graph",
   "item": [
    {
     "name": "Get the whole tenant job graph",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/jobs/graph",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobs",
        "graph"
       ]
      }
     }
    },
    {
     "name": "Atomically save the whole job graph",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/jobs/graph",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobs",
        "graph"
       ],
       "query": [
        {
         "key": "deleteMissing",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"nodes\": [\n    {\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"jobTemplate\": \"string\",\n      \"jobCategoryEnum\": \"string\",\n      \"disabled\": true,\n      \"verboseReport\": true,\n      \"stopOnError\": true,\n      \"processNextJobOnError\": true,\n      \"timerEntity\": {\n        \"code\": \"string\",\n        \"year\": \"string\",\n        \"month\": \"string\",\n        \"dayOfMonth\": \"string\",\n        \"dayOfWeek\": \"string\",\n        \"hour\": \"string\",\n        \"minute\": \"string\",\n        \"second\": \"string\",\n        \"start\": \"string\",\n        \"end\": \"string\",\n        \"empty\": true\n      },\n      \"cfValues\": {\n        \"customField\": [\n          null\n        ],\n        \"inheritedCustomField\": [\n          null\n        ]\n      },\n      \"lastExecution\": {\n        \"id\": 0,\n        \"status\": \"string\",\n        \"startDate\": \"string\",\n        \"endDate\": \"string\",\n        \"nbItemsToProcess\": 0,\n        \"nbItemsCorrectlyProcessed\": 0,\n        \"nbItemsProcessedWithError\": 0,\n        \"nbItemsProcessedWithWarning\": 0\n      },\n      \"scriptSource\": \"string\",\n      \"new\": true,\n      \"isNew\": true\n    }\n  ],\n  \"edges\": [\n    {\n      \"from\": \"string\",\n      \"to\": \"string\",\n      \"processNextJobOnErrorOnSource\": true\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Wire one job to follow another (drag-to-connect)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/jobs/graph/connect",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobs",
        "graph",
        "connect"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"source\": \"string\",\n  \"target\": \"string\",\n  \"processNextJobOnErrorOnSource\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Insert a node between an existing node and its successor",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/jobs/graph/insert",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobs",
        "graph",
        "insert"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"afterCode\": \"string\",\n  \"node\": {\n    \"code\": \"string\",\n    \"description\": \"string\",\n    \"jobTemplate\": \"string\",\n    \"jobCategoryEnum\": \"string\",\n    \"disabled\": true,\n    \"verboseReport\": true,\n    \"stopOnError\": true,\n    \"processNextJobOnError\": true,\n    \"timerEntity\": {\n      \"code\": \"string\",\n      \"year\": \"string\",\n      \"month\": \"string\",\n      \"dayOfMonth\": \"string\",\n      \"dayOfWeek\": \"string\",\n      \"hour\": \"string\",\n      \"minute\": \"string\",\n      \"second\": \"string\",\n      \"start\": \"string\",\n      \"end\": \"string\",\n      \"empty\": true\n    },\n    \"cfValues\": {\n      \"customField\": [\n        {\n          \"code\": null,\n          \"description\": null,\n          \"fieldType\": null,\n          \"languageDescriptions\": null,\n          \"valueDate\": null,\n          \"valuePeriodStartDate\": null,\n          \"valuePeriodEndDate\": null,\n          \"valuePeriodPriority\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"mapValue\": null,\n          \"entityReferenceValue\": null,\n          \"valueConverted\": null,\n          \"indexType\": null,\n          \"fileValue\": null,\n          \"formattedValue\": null,\n          \"urlReferenceValue\": null,\n          \"guiPosition\": null,\n          \"customTableCode\": null,\n          \"dataFilter\": null,\n          \"fields\": null,\n          \"applicableOnEl\": null,\n          \"applicableOnElExpression\": null,\n          \"value\": null\n        }\n      ],\n      \"inheritedCustomField\": [\n        {\n          \"code\": null,\n          \"description\": null,\n          \"fieldType\": null,\n          \"languageDescriptions\": null,\n          \"valueDate\": null,\n          \"valuePeriodStartDate\": null,\n          \"valuePeriodEndDate\": null,\n          \"valuePeriodPriority\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"mapValue\": null,\n          \"entityReferenceValue\": null,\n          \"valueConverted\": null,\n          \"indexType\": null,\n          \"fileValue\": null,\n          \"formattedValue\": null,\n          \"urlReferenceValue\": null,\n          \"guiPosition\": null,\n          \"customTableCode\": null,\n          \"dataFilter\": null,\n          \"fields\": null,\n          \"applicableOnEl\": null,\n          \"applicableOnElExpression\": null,\n          \"value\": null\n        }\n      ]\n    },\n    \"lastExecution\": {\n      \"id\": 0,\n      \"status\": \"string\",\n      \"startDate\": \"string\",\n      \"endDate\": \"string\",\n      \"nbItemsToProcess\": 0,\n      \"nbItemsCorrectlyProcessed\": 0,\n      \"nbItemsProcessedWithError\": 0,\n      \"nbItemsProcessedWithWarning\": 0\n    },\n    \"scriptSource\": \"string\",\n    \"new\": true,\n    \"isNew\": true\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "Delete a node and rewire neighbours",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/jobs/graph/nodes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "jobs",
        "graph",
        "nodes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      }
     }
    }
   ]
  },
  {
   "name": "CDRs",
   "item": [
    {
     "name": "Rate CDRs (JSON, sync)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/cdrs/rating",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "cdrs",
        "rating"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"cdrs\": [\n    {\n      \"eventDate\": \"2026-06-01T10:15:30+00:00\",\n      \"quantity\": 1,\n      \"accessCode\": \"MSISDN_33612345678\",\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"parameter4\": \"string\",\n      \"parameter5\": \"string\",\n      \"parameter6\": \"string\",\n      \"parameter7\": \"string\",\n      \"parameter8\": \"string\",\n      \"parameter9\": \"string\",\n      \"dateParam1\": \"string\",\n      \"dateParam2\": \"string\",\n      \"dateParam3\": \"string\",\n      \"dateParam4\": \"string\",\n      \"dateParam5\": \"string\",\n      \"decimalParam1\": 0,\n      \"decimalParam2\": 0,\n      \"decimalParam3\": 0,\n      \"decimalParam4\": 0,\n      \"decimalParam5\": 0,\n      \"extraParameter\": \"string\"\n    }\n  ],\n  \"processingOptions\": {\n    \"mode\": \"STOP_ON_FIRST_FAIL\",\n    \"isVirtual\": false,\n    \"rateTriggeredEdr\": false,\n    \"maxDepth\": 0,\n    \"returnEDRs\": false,\n    \"returnWalletOperations\": false,\n    \"returnWalletOperationDetails\": false,\n    \"returnCounters\": false,\n    \"generateRTs\": false\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Register and rate the CDRs, producing wallet operations. Accepts a bulk envelope or a single record. Use processingOptions (or the query toggles on the CSV variants) to control triggered-EDR rating and what the response returns (EDRs, wallet operations, counters). Set generateRTs to also create rated transactions."
     }
    },
    {
     "name": "Rate CDRs (async)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/cdrs/rating/async",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "cdrs",
        "rating",
        "async"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "\"string\"",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Stage the CDRs to a background job for rating. Accepts JSON or CSV bodies (Content-Type header). Returns 202 with a job run id to poll."
     }
    },
    {
     "name": "Register CDRs (JSON, sync)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/cdrs/registration",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "cdrs",
        "registration"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"cdrs\": [\n    {\n      \"eventDate\": \"2026-06-01T10:15:30+00:00\",\n      \"quantity\": 1,\n      \"accessCode\": \"MSISDN_33612345678\",\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"parameter4\": \"string\",\n      \"parameter5\": \"string\",\n      \"parameter6\": \"string\",\n      \"parameter7\": \"string\",\n      \"parameter8\": \"string\",\n      \"parameter9\": \"string\",\n      \"dateParam1\": \"string\",\n      \"dateParam2\": \"string\",\n      \"dateParam3\": \"string\",\n      \"dateParam4\": \"string\",\n      \"dateParam5\": \"string\",\n      \"decimalParam1\": 0,\n      \"decimalParam2\": 0,\n      \"decimalParam3\": 0,\n      \"decimalParam4\": 0,\n      \"decimalParam5\": 0,\n      \"extraParameter\": \"string\"\n    }\n  ],\n  \"processingOptions\": {\n    \"mode\": \"STOP_ON_FIRST_FAIL\",\n    \"isVirtual\": false,\n    \"rateTriggeredEdr\": false,\n    \"maxDepth\": 0,\n    \"returnEDRs\": false,\n    \"returnWalletOperations\": false,\n    \"returnWalletOperationDetails\": false,\n    \"returnCounters\": false,\n    \"generateRTs\": false\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Persist the CDRs as EDRs without rating them. Accepts a bulk envelope or a single record. The mode query parameter overrides processingOptions.mode when present. Returns per-item results."
     }
    },
    {
     "name": "Register CDRs (async)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/cdrs/registration/async",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "cdrs",
        "registration",
        "async"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "\"string\"",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Stage the CDRs to a background job for registration. Accepts JSON or CSV bodies (Content-Type header). Returns 202 with a job run id to poll."
     }
    },
    {
     "name": "Reserve against CDRs (JSON, sync)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/cdrs/reservation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "cdrs",
        "reservation"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"cdrs\": [\n    {\n      \"eventDate\": \"2026-06-01T10:15:30+00:00\",\n      \"quantity\": 1,\n      \"accessCode\": \"MSISDN_33612345678\",\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"parameter4\": \"string\",\n      \"parameter5\": \"string\",\n      \"parameter6\": \"string\",\n      \"parameter7\": \"string\",\n      \"parameter8\": \"string\",\n      \"parameter9\": \"string\",\n      \"dateParam1\": \"string\",\n      \"dateParam2\": \"string\",\n      \"dateParam3\": \"string\",\n      \"dateParam4\": \"string\",\n      \"dateParam5\": \"string\",\n      \"decimalParam1\": 0,\n      \"decimalParam2\": 0,\n      \"decimalParam3\": 0,\n      \"decimalParam4\": 0,\n      \"decimalParam5\": 0,\n      \"extraParameter\": \"string\"\n    }\n  ],\n  \"processingOptions\": {\n    \"mode\": \"STOP_ON_FIRST_FAIL\",\n    \"isVirtual\": false,\n    \"rateTriggeredEdr\": false,\n    \"maxDepth\": 0,\n    \"returnEDRs\": false,\n    \"returnWalletOperations\": false,\n    \"returnWalletOperationDetails\": false,\n    \"returnCounters\": false,\n    \"generateRTs\": false\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create prepaid reservations for the CDRs (authorize balance without final rating). Accepts a bulk envelope or a single record. Returns per-item reservation ids."
     }
    },
    {
     "name": "Reserve against CDRs (async)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/cdrs/reservation/async",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "cdrs",
        "reservation",
        "async"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "\"string\"",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Stage the CDRs to a background job for reservation. Returns 202 with a job run id to poll."
     }
    },
    {
     "name": "Get one CDR",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/cdrs/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "cdrs",
        ":id"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single persisted CDR by its numeric id. Read-only."
     }
    },
    {
     "name": "Delete one CDR",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/cdrs/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "cdrs",
        ":id"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Delete a persisted CDR by its numeric id. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "EDRs",
   "item": [
    {
     "name": "Rate EDRs (sync)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/edrs/rating",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "edrs",
        "rating"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"edrs\": [\n    {\n      \"subscriptionCode\": \"SUB_ACME_001\",\n      \"accessCode\": \"MSISDN_33612345678\",\n      \"eventDate\": \"2026-06-01T10:15:30+00:00\",\n      \"quantity\": 1,\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"parameter4\": \"string\",\n      \"parameter5\": \"string\",\n      \"parameter6\": \"string\",\n      \"parameter7\": \"string\",\n      \"parameter8\": \"string\",\n      \"parameter9\": \"string\",\n      \"dateParam1\": \"string\",\n      \"dateParam2\": \"string\",\n      \"dateParam3\": \"string\",\n      \"dateParam4\": \"string\",\n      \"dateParam5\": \"string\",\n      \"decimalParam1\": 0,\n      \"decimalParam2\": 0,\n      \"decimalParam3\": 0,\n      \"decimalParam4\": 0,\n      \"decimalParam5\": 0,\n      \"extraParameter\": \"string\",\n      \"originBatch\": \"string\",\n      \"originRecord\": \"string\"\n    }\n  ],\n  \"processingOptions\": {\n    \"mode\": \"STOP_ON_FIRST_FAIL\",\n    \"isVirtual\": false,\n    \"rateTriggeredEdr\": false,\n    \"maxDepth\": 0,\n    \"returnEDRs\": false,\n    \"returnWalletOperations\": false,\n    \"returnWalletOperationDetails\": false,\n    \"returnCounters\": false,\n    \"generateRTs\": false\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Rate the EDRs, producing wallet operations. Use processingOptions to control triggered-EDR rating and what the response returns. Set generateRTs to also create rated transactions."
     }
    },
    {
     "name": "Rate EDRs (async)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/edrs/rating/async",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "edrs",
        "rating",
        "async"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"edrs\": [\n    {\n      \"subscriptionCode\": \"SUB_ACME_001\",\n      \"accessCode\": \"MSISDN_33612345678\",\n      \"eventDate\": \"2026-06-01T10:15:30+00:00\",\n      \"quantity\": 1,\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"parameter4\": \"string\",\n      \"parameter5\": \"string\",\n      \"parameter6\": \"string\",\n      \"parameter7\": \"string\",\n      \"parameter8\": \"string\",\n      \"parameter9\": \"string\",\n      \"dateParam1\": \"string\",\n      \"dateParam2\": \"string\",\n      \"dateParam3\": \"string\",\n      \"dateParam4\": \"string\",\n      \"dateParam5\": \"string\",\n      \"decimalParam1\": 0,\n      \"decimalParam2\": 0,\n      \"decimalParam3\": 0,\n      \"decimalParam4\": 0,\n      \"decimalParam5\": 0,\n      \"extraParameter\": \"string\",\n      \"originBatch\": \"string\",\n      \"originRecord\": \"string\"\n    }\n  ],\n  \"processingOptions\": {\n    \"mode\": \"STOP_ON_FIRST_FAIL\",\n    \"isVirtual\": false,\n    \"rateTriggeredEdr\": false,\n    \"maxDepth\": 0,\n    \"returnEDRs\": false,\n    \"returnWalletOperations\": false,\n    \"returnWalletOperationDetails\": false,\n    \"returnCounters\": false,\n    \"generateRTs\": false\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Stage the EDRs to a background job for rating. Returns 202 with a job run id to poll."
     }
    },
    {
     "name": "Register EDRs (sync)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/edrs/registration",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "edrs",
        "registration"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"edrs\": [\n    {\n      \"subscriptionCode\": \"SUB_ACME_001\",\n      \"accessCode\": \"MSISDN_33612345678\",\n      \"eventDate\": \"2026-06-01T10:15:30+00:00\",\n      \"quantity\": 1,\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"parameter4\": \"string\",\n      \"parameter5\": \"string\",\n      \"parameter6\": \"string\",\n      \"parameter7\": \"string\",\n      \"parameter8\": \"string\",\n      \"parameter9\": \"string\",\n      \"dateParam1\": \"string\",\n      \"dateParam2\": \"string\",\n      \"dateParam3\": \"string\",\n      \"dateParam4\": \"string\",\n      \"dateParam5\": \"string\",\n      \"decimalParam1\": 0,\n      \"decimalParam2\": 0,\n      \"decimalParam3\": 0,\n      \"decimalParam4\": 0,\n      \"decimalParam5\": 0,\n      \"extraParameter\": \"string\",\n      \"originBatch\": \"string\",\n      \"originRecord\": \"string\"\n    }\n  ],\n  \"processingOptions\": {\n    \"mode\": \"STOP_ON_FIRST_FAIL\",\n    \"isVirtual\": false,\n    \"rateTriggeredEdr\": false,\n    \"maxDepth\": 0,\n    \"returnEDRs\": false,\n    \"returnWalletOperations\": false,\n    \"returnWalletOperationDetails\": false,\n    \"returnCounters\": false,\n    \"generateRTs\": false\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Persist the EDRs without rating them. Accepts a bulk envelope; the mode query parameter overrides processingOptions.mode when present. Returns per-item results."
     }
    },
    {
     "name": "Register EDRs (async)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/edrs/registration/async",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "edrs",
        "registration",
        "async"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"edrs\": [\n    {\n      \"subscriptionCode\": \"SUB_ACME_001\",\n      \"accessCode\": \"MSISDN_33612345678\",\n      \"eventDate\": \"2026-06-01T10:15:30+00:00\",\n      \"quantity\": 1,\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"parameter4\": \"string\",\n      \"parameter5\": \"string\",\n      \"parameter6\": \"string\",\n      \"parameter7\": \"string\",\n      \"parameter8\": \"string\",\n      \"parameter9\": \"string\",\n      \"dateParam1\": \"string\",\n      \"dateParam2\": \"string\",\n      \"dateParam3\": \"string\",\n      \"dateParam4\": \"string\",\n      \"dateParam5\": \"string\",\n      \"decimalParam1\": 0,\n      \"decimalParam2\": 0,\n      \"decimalParam3\": 0,\n      \"decimalParam4\": 0,\n      \"decimalParam5\": 0,\n      \"extraParameter\": \"string\",\n      \"originBatch\": \"string\",\n      \"originRecord\": \"string\"\n    }\n  ],\n  \"processingOptions\": {\n    \"mode\": \"STOP_ON_FIRST_FAIL\",\n    \"isVirtual\": false,\n    \"rateTriggeredEdr\": false,\n    \"maxDepth\": 0,\n    \"returnEDRs\": false,\n    \"returnWalletOperations\": false,\n    \"returnWalletOperationDetails\": false,\n    \"returnCounters\": false,\n    \"generateRTs\": false\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Stage the EDRs to a background job for registration. Returns 202 with a job run id to poll."
     }
    },
    {
     "name": "Reserve against EDRs (sync)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/edrs/reservation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "edrs",
        "reservation"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"edrs\": [\n    {\n      \"subscriptionCode\": \"SUB_ACME_001\",\n      \"accessCode\": \"MSISDN_33612345678\",\n      \"eventDate\": \"2026-06-01T10:15:30+00:00\",\n      \"quantity\": 1,\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"parameter4\": \"string\",\n      \"parameter5\": \"string\",\n      \"parameter6\": \"string\",\n      \"parameter7\": \"string\",\n      \"parameter8\": \"string\",\n      \"parameter9\": \"string\",\n      \"dateParam1\": \"string\",\n      \"dateParam2\": \"string\",\n      \"dateParam3\": \"string\",\n      \"dateParam4\": \"string\",\n      \"dateParam5\": \"string\",\n      \"decimalParam1\": 0,\n      \"decimalParam2\": 0,\n      \"decimalParam3\": 0,\n      \"decimalParam4\": 0,\n      \"decimalParam5\": 0,\n      \"extraParameter\": \"string\",\n      \"originBatch\": \"string\",\n      \"originRecord\": \"string\"\n    }\n  ],\n  \"processingOptions\": {\n    \"mode\": \"STOP_ON_FIRST_FAIL\",\n    \"isVirtual\": false,\n    \"rateTriggeredEdr\": false,\n    \"maxDepth\": 0,\n    \"returnEDRs\": false,\n    \"returnWalletOperations\": false,\n    \"returnWalletOperationDetails\": false,\n    \"returnCounters\": false,\n    \"generateRTs\": false\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create prepaid reservations for the EDRs (authorize balance without final rating). Returns per-item reservation ids."
     }
    },
    {
     "name": "Reserve against EDRs (async)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/edrs/reservation/async",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "edrs",
        "reservation",
        "async"
       ],
       "query": [
        {
         "key": "mode",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"edrs\": [\n    {\n      \"subscriptionCode\": \"SUB_ACME_001\",\n      \"accessCode\": \"MSISDN_33612345678\",\n      \"eventDate\": \"2026-06-01T10:15:30+00:00\",\n      \"quantity\": 1,\n      \"parameter1\": \"string\",\n      \"parameter2\": \"string\",\n      \"parameter3\": \"string\",\n      \"parameter4\": \"string\",\n      \"parameter5\": \"string\",\n      \"parameter6\": \"string\",\n      \"parameter7\": \"string\",\n      \"parameter8\": \"string\",\n      \"parameter9\": \"string\",\n      \"dateParam1\": \"string\",\n      \"dateParam2\": \"string\",\n      \"dateParam3\": \"string\",\n      \"dateParam4\": \"string\",\n      \"dateParam5\": \"string\",\n      \"decimalParam1\": 0,\n      \"decimalParam2\": 0,\n      \"decimalParam3\": 0,\n      \"decimalParam4\": 0,\n      \"decimalParam5\": 0,\n      \"extraParameter\": \"string\",\n      \"originBatch\": \"string\",\n      \"originRecord\": \"string\"\n    }\n  ],\n  \"processingOptions\": {\n    \"mode\": \"STOP_ON_FIRST_FAIL\",\n    \"isVirtual\": false,\n    \"rateTriggeredEdr\": false,\n    \"maxDepth\": 0,\n    \"returnEDRs\": false,\n    \"returnWalletOperations\": false,\n    \"returnWalletOperationDetails\": false,\n    \"returnCounters\": false,\n    \"generateRTs\": false\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Stage the EDRs to a background job for reservation. Returns 202 with a job run id to poll."
     }
    },
    {
     "name": "Get one EDR",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/edrs/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "edrs",
        ":id"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single persisted EDR by its numeric id. Read-only."
     }
    }
   ]
  },
  {
   "name": "Modules",
   "item": [
    {
     "name": "List installed modules",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/modules",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "modules"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of installed modules."
     }
    },
    {
     "name": "Get a module by code",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/modules/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "modules",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single installed module by its code."
     }
    },
    {
     "name": "Uninstall a module",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/modules/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "modules",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Uninstalls the module. Returns 409 when the module is not installed."
     }
    },
    {
     "name": "Enable a module",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/modules/:code/activation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "modules",
        ":code",
        "activation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Activates (enables) the module. Modeled as a noun-form action sub-resource."
     }
    },
    {
     "name": "Disable a module",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/modules/:code/deactivation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "modules",
        ":code",
        "deactivation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Deactivates (disables) the module without uninstalling it. Modeled as a noun-form action sub-resource."
     }
    }
   ]
  },
  {
   "name": "Notifications",
   "item": [
    {
     "name": "List notifications for a channel",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/notifications",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "notifications"
       ],
       "query": [
        {
         "key": "channel",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of notifications on the given channel. channel is required; an unknown value returns 400."
     }
    },
    {
     "name": "Create a notification",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/notifications",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "notifications"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ON_INVOICE_CREATED\",\n  \"channel\": \"EMAIL\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"classNameFilter\": \"org.meveo.model.billing.Invoice\",\n  \"eventTypeFilter\": \"CREATED\",\n  \"elFilter\": \"event.amountWithTax > 0\",\n  \"priority\": 1,\n  \"runAsync\": true,\n  \"counterTemplate\": \"string\",\n  \"saveSuccessfulNotifications\": true,\n  \"scriptInstanceCode\": \"string\",\n  \"scriptParams\": {},\n  \"emailFrom\": \"string\",\n  \"emailToEl\": \"event.billingAccount.email\",\n  \"subject\": \"string\",\n  \"body\": \"string\",\n  \"htmlBody\": \"string\",\n  \"sendToMail\": [\n    \"string\"\n  ],\n  \"httpProtocol\": \"HTTPS\",\n  \"host\": \"hooks.example.com\",\n  \"port\": 443,\n  \"page\": \"/billerang/events\",\n  \"httpMethod\": \"POST\",\n  \"username\": \"string\",\n  \"password\": \"string\",\n  \"headers\": {},\n  \"params\": {},\n  \"bodyEl\": \"string\",\n  \"jobInstance\": \"string\",\n  \"jobParams\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a notification. The channel field in the body is required and selects the active section. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Get one notification",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/notifications/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "notifications",
        ":code"
       ],
       "query": [
        {
         "key": "channel",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single notification by code within a channel. channel is required to disambiguate."
     }
    },
    {
     "name": "Create or update a notification (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/notifications/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "notifications",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ON_INVOICE_CREATED\",\n  \"channel\": \"EMAIL\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"classNameFilter\": \"org.meveo.model.billing.Invoice\",\n  \"eventTypeFilter\": \"CREATED\",\n  \"elFilter\": \"event.amountWithTax > 0\",\n  \"priority\": 1,\n  \"runAsync\": true,\n  \"counterTemplate\": \"string\",\n  \"saveSuccessfulNotifications\": true,\n  \"scriptInstanceCode\": \"string\",\n  \"scriptParams\": {},\n  \"emailFrom\": \"string\",\n  \"emailToEl\": \"event.billingAccount.email\",\n  \"subject\": \"string\",\n  \"body\": \"string\",\n  \"htmlBody\": \"string\",\n  \"sendToMail\": [\n    \"string\"\n  ],\n  \"httpProtocol\": \"HTTPS\",\n  \"host\": \"hooks.example.com\",\n  \"port\": 443,\n  \"page\": \"/billerang/events\",\n  \"httpMethod\": \"POST\",\n  \"username\": \"string\",\n  \"password\": \"string\",\n  \"headers\": {},\n  \"params\": {},\n  \"bodyEl\": \"string\",\n  \"jobInstance\": \"string\",\n  \"jobParams\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the code in the path. The channel field in the body is required. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Update a notification",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/notifications/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "notifications",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ON_INVOICE_CREATED\",\n  \"channel\": \"EMAIL\",\n  \"description\": \"string\",\n  \"disabled\": false,\n  \"classNameFilter\": \"org.meveo.model.billing.Invoice\",\n  \"eventTypeFilter\": \"CREATED\",\n  \"elFilter\": \"event.amountWithTax > 0\",\n  \"priority\": 1,\n  \"runAsync\": true,\n  \"counterTemplate\": \"string\",\n  \"saveSuccessfulNotifications\": true,\n  \"scriptInstanceCode\": \"string\",\n  \"scriptParams\": {},\n  \"emailFrom\": \"string\",\n  \"emailToEl\": \"event.billingAccount.email\",\n  \"subject\": \"string\",\n  \"body\": \"string\",\n  \"htmlBody\": \"string\",\n  \"sendToMail\": [\n    \"string\"\n  ],\n  \"httpProtocol\": \"HTTPS\",\n  \"host\": \"hooks.example.com\",\n  \"port\": 443,\n  \"page\": \"/billerang/events\",\n  \"httpMethod\": \"POST\",\n  \"username\": \"string\",\n  \"password\": \"string\",\n  \"headers\": {},\n  \"params\": {},\n  \"bodyEl\": \"string\",\n  \"jobInstance\": \"string\",\n  \"jobParams\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing notification. The channel field in the body is required. Partial-update semantics apply. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Delete a notification",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/notifications/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "notifications",
        ":code"
       ],
       "query": [
        {
         "key": "channel",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes a notification by code within a channel. channel is required to disambiguate."
     }
    }
   ]
  },
  {
   "name": "Orders",
   "item": [
    {
     "name": "Create a commercial order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/orders",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders"
       ],
       "query": [
        {
         "key": "autoValidate",
         "value": "",
         "disabled": true
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"string\",\n  \"externalReference\": \"string\",\n  \"orderType\": \"string\",\n  \"sourceOrderExternalReference\": \"string\",\n  \"sellerCode\": \"string\",\n  \"customerCode\": \"string\",\n  \"billingAccountCode\": \"string\",\n  \"userAccountCode\": \"string\",\n  \"contractCode\": \"string\",\n  \"orderDate\": \"string\",\n  \"progressDate\": \"string\",\n  \"effectiveDate\": \"string\",\n  \"activationDate\": \"string\",\n  \"description\": \"string\",\n  \"salesPersonName\": \"string\",\n  \"billingCycleCode\": \"string\",\n  \"priceListCode\": \"string\",\n  \"invoicingPlanCode\": \"string\",\n  \"orderProgress\": 0,\n  \"reason\": \"string\",\n  \"discountPlanCodes\": [\n    \"string\"\n  ],\n  \"externalOrderNumber\": \"string\",\n  \"processingOptions\": {\n    \"runBilling\": true,\n    \"billingTargetDate\": \"string\",\n    \"billingRunType\": \"string\",\n    \"notifyOnCompletion\": true\n  },\n  \"previewThrough\": {\n    \"type\": \"string\",\n    \"date\": \"string\",\n    \"periods\": 0\n  },\n  \"customFields\": {},\n  \"orderOffers\": [\n    {\n      \"orderOfferId\": 0,\n      \"subscriptionCode\": \"string\",\n      \"orderLineType\": \"string\",\n      \"offerTemplateCode\": \"string\",\n      \"userAccountCode\": \"string\",\n      \"accessCode\": \"string\",\n      \"accessDefinitions\": [\n        {\n          \"accessUserId\": null,\n          \"startDate\": null,\n          \"endDate\": null,\n          \"disabled\": null,\n          \"customFields\": null\n        }\n      ],\n      \"termsAndConditions\": {\n        \"type\": \"string\",\n        \"initialTerm\": {\n          \"duration\": null,\n          \"unit\": null,\n          \"endDate\": null,\n          \"calendar\": null\n        },\n        \"autoRenew\": true,\n        \"renewalTerm\": {\n          \"duration\": null,\n          \"unit\": null,\n          \"endDate\": null,\n          \"calendar\": null\n        },\n        \"onExpiry\": \"string\",\n        \"terminationReason\": \"string\",\n        \"notifyDaysBefore\": 0,\n        \"alignEndDate\": true\n      },\n      \"subscriptionRenewal\": {\n        \"initialTerm\": 0,\n        \"initialTermType\": \"string\",\n        \"autoRenew\": true,\n        \"renewalTerm\": 0,\n        \"renewalTermType\": \"string\",\n        \"daysNotifyRenewal\": 0,\n        \"endOfTermAction\": \"string\"\n      },\n      \"discountPlanCodes\": [\n        \"string\"\n      ],\n      \"externalOrderOfferNumber\": \"string\",\n      \"deliveryDate\": \"string\",\n      \"terminationDate\": \"string\",\n      \"terminationReasonCode\": \"string\",\n      \"orderProducts\": [\n        {\n          \"orderProductId\": null,\n          \"productCode\": null,\n          \"productVersion\": null,\n          \"productActionType\": null,\n          \"quantity\": null,\n          \"activationDate\": null,\n          \"discountPlanCodes\": null,\n          \"deliveryDate\": null,\n          \"terminationDate\": null,\n          \"terminationReasonCode\": null,\n          \"charges\": null,\n          \"orderAttributes\": null,\n          \"customFields\": null,\n          \"billSeparately\": null,\n          \"suspensionReason\": null,\n          \"extendTermBySuspensionDuration\": null,\n          \"unlinkDiscountPlanCodes\": null,\n          \"removeCharges\": null,\n          \"removeOrderAttributes\": null\n        }\n      ],\n      \"billSeparately\": true,\n      \"tradingCurrencyCode\": \"string\",\n      \"offerAttributes\": [\n        {\n          \"attributeCode\": null,\n          \"stringValue\": null,\n          \"numericValue\": null,\n          \"booleanValue\": null,\n          \"dateValue\": null\n        }\n      ],\n      \"removeOfferAttributes\": [\n        \"string\"\n      ],\n      \"customFields\": {},\n      \"unlinkDiscountPlanCodes\": [\n        \"string\"\n      ],\n      \"removeOrderProducts\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"orderChargeItems\": [\n    {\n      \"externalReference\": \"string\",\n      \"chargeCode\": \"string\",\n      \"subscriptionCode\": \"string\",\n      \"billingAccountCode\": \"string\",\n      \"quantity\": 0,\n      \"priceOverride\": {\n        \"amountWithoutTax\": 0,\n        \"amountWithTax\": 0\n      },\n      \"description\": \"string\",\n      \"applicationDate\": \"string\",\n      \"billSeparately\": true,\n      \"taxInclusive\": true,\n      \"taxClassCode\": \"string\",\n      \"invoicingCalendarCode\": \"string\",\n      \"pricing\": {\n        \"chargeCode\": \"string\",\n        \"description\": \"string\",\n        \"quantity\": 0,\n        \"taxInclusive\": true,\n        \"taxClassCode\": \"string\",\n        \"tradingCurrencyCode\": \"string\",\n        \"invoicingCalendarCode\": \"string\",\n        \"billSeparately\": true,\n        \"pricing\": {\n          \"pricingModel\": null,\n          \"price\": null,\n          \"priceWithTax\": null,\n          \"ratingScriptCode\": null,\n          \"bands\": null,\n          \"matrixColumns\": null,\n          \"matrixCells\": null,\n          \"inputUomCode\": null,\n          \"ratingUomCode\": null,\n          \"unitMultiplicator\": null,\n          \"unitNbDecimal\": null,\n          \"roundingMode\": null,\n          \"price_fx\": null,\n          \"filter_fx\": null,\n          \"total_amount_fx\": null,\n          \"minimum_amount_fx\": null\n        },\n        \"recurring\": {\n          \"calendarCode\": null,\n          \"durationTermInMonth\": null,\n          \"subscriptionProrata\": null,\n          \"terminationProrata\": null,\n          \"prorataOnPriceChange\": null,\n          \"applyInAdvance\": null,\n          \"subscription_prorata_fx\": null,\n          \"termination_prorata_fx\": null,\n          \"apply_in_advance_fx\": null,\n          \"duration_term_in_month_fx\": null,\n          \"calendar_code_fx\": null\n        },\n        \"usage\": {\n          \"filterParam1\": null,\n          \"filterParam2\": null,\n          \"filterParam3\": null,\n          \"filterParam4\": null,\n          \"priority\": null,\n          \"triggerNextCharge\": null,\n          \"ratingPeriodCalendarCode\": null,\n          \"accumulatorType\": null,\n          \"trackedValue\": null,\n          \"initialValue\": null,\n          \"trigger_next_charge_fx\": null,\n          \"acc_filter_fx\": null,\n          \"acc_key_fx\": null,\n          \"acc_value_fx\": null\n        },\n        \"chargeAttributes\": [\n          null\n        ],\n        \"customFields\": {},\n        \"resetFields\": [\n          null\n        ],\n        \"removeChargeAttributes\": [\n          null\n        ]\n      },\n      \"chargeAttributes\": [\n        {\n          \"attributeCode\": null,\n          \"stringValue\": null,\n          \"numericValue\": null,\n          \"booleanValue\": null,\n          \"dateValue\": null\n        }\n      ],\n      \"customFields\": {}\n    }\n  ],\n  \"unlinkDiscountPlanCodes\": [\n    \"string\"\n  ],\n  \"removeOrderOffers\": [\n    \"string\"\n  ],\n  \"removeOrderChargeItems\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Single create endpoint for NEW, AMENDMENT, CANCELLATION, and RENEWAL. Use orderType at order level, orderLineType per order offer, and productActionType per order product to express the operation. Idempotent on externalReference: re-POSTing the same reference returns the existing order unchanged. Set autoValidate=false to leave the order in DRAFT."
     }
    },
    {
     "name": "Preview an order's charges without persisting",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/preview",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        "preview"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"string\",\n  \"externalReference\": \"string\",\n  \"orderType\": \"string\",\n  \"sourceOrderExternalReference\": \"string\",\n  \"sellerCode\": \"string\",\n  \"customerCode\": \"string\",\n  \"billingAccountCode\": \"string\",\n  \"userAccountCode\": \"string\",\n  \"contractCode\": \"string\",\n  \"orderDate\": \"string\",\n  \"progressDate\": \"string\",\n  \"effectiveDate\": \"string\",\n  \"activationDate\": \"string\",\n  \"description\": \"string\",\n  \"salesPersonName\": \"string\",\n  \"billingCycleCode\": \"string\",\n  \"priceListCode\": \"string\",\n  \"invoicingPlanCode\": \"string\",\n  \"orderProgress\": 0,\n  \"reason\": \"string\",\n  \"discountPlanCodes\": [\n    \"string\"\n  ],\n  \"externalOrderNumber\": \"string\",\n  \"processingOptions\": {\n    \"runBilling\": true,\n    \"billingTargetDate\": \"string\",\n    \"billingRunType\": \"string\",\n    \"notifyOnCompletion\": true\n  },\n  \"previewThrough\": {\n    \"type\": \"string\",\n    \"date\": \"string\",\n    \"periods\": 0\n  },\n  \"customFields\": {},\n  \"orderOffers\": [\n    {\n      \"orderOfferId\": 0,\n      \"subscriptionCode\": \"string\",\n      \"orderLineType\": \"string\",\n      \"offerTemplateCode\": \"string\",\n      \"userAccountCode\": \"string\",\n      \"accessCode\": \"string\",\n      \"accessDefinitions\": [\n        {\n          \"accessUserId\": null,\n          \"startDate\": null,\n          \"endDate\": null,\n          \"disabled\": null,\n          \"customFields\": null\n        }\n      ],\n      \"termsAndConditions\": {\n        \"type\": \"string\",\n        \"initialTerm\": {\n          \"duration\": null,\n          \"unit\": null,\n          \"endDate\": null,\n          \"calendar\": null\n        },\n        \"autoRenew\": true,\n        \"renewalTerm\": {\n          \"duration\": null,\n          \"unit\": null,\n          \"endDate\": null,\n          \"calendar\": null\n        },\n        \"onExpiry\": \"string\",\n        \"terminationReason\": \"string\",\n        \"notifyDaysBefore\": 0,\n        \"alignEndDate\": true\n      },\n      \"subscriptionRenewal\": {\n        \"initialTerm\": 0,\n        \"initialTermType\": \"string\",\n        \"autoRenew\": true,\n        \"renewalTerm\": 0,\n        \"renewalTermType\": \"string\",\n        \"daysNotifyRenewal\": 0,\n        \"endOfTermAction\": \"string\"\n      },\n      \"discountPlanCodes\": [\n        \"string\"\n      ],\n      \"externalOrderOfferNumber\": \"string\",\n      \"deliveryDate\": \"string\",\n      \"terminationDate\": \"string\",\n      \"terminationReasonCode\": \"string\",\n      \"orderProducts\": [\n        {\n          \"orderProductId\": null,\n          \"productCode\": null,\n          \"productVersion\": null,\n          \"productActionType\": null,\n          \"quantity\": null,\n          \"activationDate\": null,\n          \"discountPlanCodes\": null,\n          \"deliveryDate\": null,\n          \"terminationDate\": null,\n          \"terminationReasonCode\": null,\n          \"charges\": null,\n          \"orderAttributes\": null,\n          \"customFields\": null,\n          \"billSeparately\": null,\n          \"suspensionReason\": null,\n          \"extendTermBySuspensionDuration\": null,\n          \"unlinkDiscountPlanCodes\": null,\n          \"removeCharges\": null,\n          \"removeOrderAttributes\": null\n        }\n      ],\n      \"billSeparately\": true,\n      \"tradingCurrencyCode\": \"string\",\n      \"offerAttributes\": [\n        {\n          \"attributeCode\": null,\n          \"stringValue\": null,\n          \"numericValue\": null,\n          \"booleanValue\": null,\n          \"dateValue\": null\n        }\n      ],\n      \"removeOfferAttributes\": [\n        \"string\"\n      ],\n      \"customFields\": {},\n      \"unlinkDiscountPlanCodes\": [\n        \"string\"\n      ],\n      \"removeOrderProducts\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"orderChargeItems\": [\n    {\n      \"externalReference\": \"string\",\n      \"chargeCode\": \"string\",\n      \"subscriptionCode\": \"string\",\n      \"billingAccountCode\": \"string\",\n      \"quantity\": 0,\n      \"priceOverride\": {\n        \"amountWithoutTax\": 0,\n        \"amountWithTax\": 0\n      },\n      \"description\": \"string\",\n      \"applicationDate\": \"string\",\n      \"billSeparately\": true,\n      \"taxInclusive\": true,\n      \"taxClassCode\": \"string\",\n      \"invoicingCalendarCode\": \"string\",\n      \"pricing\": {\n        \"chargeCode\": \"string\",\n        \"description\": \"string\",\n        \"quantity\": 0,\n        \"taxInclusive\": true,\n        \"taxClassCode\": \"string\",\n        \"tradingCurrencyCode\": \"string\",\n        \"invoicingCalendarCode\": \"string\",\n        \"billSeparately\": true,\n        \"pricing\": {\n          \"pricingModel\": null,\n          \"price\": null,\n          \"priceWithTax\": null,\n          \"ratingScriptCode\": null,\n          \"bands\": null,\n          \"matrixColumns\": null,\n          \"matrixCells\": null,\n          \"inputUomCode\": null,\n          \"ratingUomCode\": null,\n          \"unitMultiplicator\": null,\n          \"unitNbDecimal\": null,\n          \"roundingMode\": null,\n          \"price_fx\": null,\n          \"filter_fx\": null,\n          \"total_amount_fx\": null,\n          \"minimum_amount_fx\": null\n        },\n        \"recurring\": {\n          \"calendarCode\": null,\n          \"durationTermInMonth\": null,\n          \"subscriptionProrata\": null,\n          \"terminationProrata\": null,\n          \"prorataOnPriceChange\": null,\n          \"applyInAdvance\": null,\n          \"subscription_prorata_fx\": null,\n          \"termination_prorata_fx\": null,\n          \"apply_in_advance_fx\": null,\n          \"duration_term_in_month_fx\": null,\n          \"calendar_code_fx\": null\n        },\n        \"usage\": {\n          \"filterParam1\": null,\n          \"filterParam2\": null,\n          \"filterParam3\": null,\n          \"filterParam4\": null,\n          \"priority\": null,\n          \"triggerNextCharge\": null,\n          \"ratingPeriodCalendarCode\": null,\n          \"accumulatorType\": null,\n          \"trackedValue\": null,\n          \"initialValue\": null,\n          \"trigger_next_charge_fx\": null,\n          \"acc_filter_fx\": null,\n          \"acc_key_fx\": null,\n          \"acc_value_fx\": null\n        },\n        \"chargeAttributes\": [\n          null\n        ],\n        \"customFields\": {},\n        \"resetFields\": [\n          null\n        ],\n        \"removeChargeAttributes\": [\n          null\n        ]\n      },\n      \"chargeAttributes\": [\n        {\n          \"attributeCode\": null,\n          \"stringValue\": null,\n          \"numericValue\": null,\n          \"booleanValue\": null,\n          \"dateValue\": null\n        }\n      ],\n      \"customFields\": {}\n    }\n  ],\n  \"unlinkDiscountPlanCodes\": [\n    \"string\"\n  ],\n  \"removeOrderOffers\": [\n    \"string\"\n  ],\n  \"removeOrderChargeItems\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Virtual-rate each CREATE subscription line (offer, products, attributes, charge overrides) via the subscription preview engine and aggregate into order-level totals. Nothing is persisted. Accepts the same payload as create."
     }
    },
    {
     "name": "Get a commercial order by code",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetch a commercial order by code, with resolved subscription/service/charge snapshots. Read-only."
     }
    },
    {
     "name": "Update a DRAFT commercial order",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"string\",\n  \"externalReference\": \"string\",\n  \"orderType\": \"string\",\n  \"sourceOrderExternalReference\": \"string\",\n  \"sellerCode\": \"string\",\n  \"customerCode\": \"string\",\n  \"billingAccountCode\": \"string\",\n  \"userAccountCode\": \"string\",\n  \"contractCode\": \"string\",\n  \"orderDate\": \"string\",\n  \"progressDate\": \"string\",\n  \"effectiveDate\": \"string\",\n  \"activationDate\": \"string\",\n  \"description\": \"string\",\n  \"salesPersonName\": \"string\",\n  \"billingCycleCode\": \"string\",\n  \"priceListCode\": \"string\",\n  \"invoicingPlanCode\": \"string\",\n  \"orderProgress\": 0,\n  \"reason\": \"string\",\n  \"discountPlanCodes\": [\n    \"string\"\n  ],\n  \"externalOrderNumber\": \"string\",\n  \"processingOptions\": {\n    \"runBilling\": true,\n    \"billingTargetDate\": \"string\",\n    \"billingRunType\": \"string\",\n    \"notifyOnCompletion\": true\n  },\n  \"previewThrough\": {\n    \"type\": \"string\",\n    \"date\": \"string\",\n    \"periods\": 0\n  },\n  \"customFields\": {},\n  \"orderOffers\": [\n    {\n      \"orderOfferId\": 0,\n      \"subscriptionCode\": \"string\",\n      \"orderLineType\": \"string\",\n      \"offerTemplateCode\": \"string\",\n      \"userAccountCode\": \"string\",\n      \"accessCode\": \"string\",\n      \"accessDefinitions\": [\n        {\n          \"accessUserId\": null,\n          \"startDate\": null,\n          \"endDate\": null,\n          \"disabled\": null,\n          \"customFields\": null\n        }\n      ],\n      \"termsAndConditions\": {\n        \"type\": \"string\",\n        \"initialTerm\": {\n          \"duration\": null,\n          \"unit\": null,\n          \"endDate\": null,\n          \"calendar\": null\n        },\n        \"autoRenew\": true,\n        \"renewalTerm\": {\n          \"duration\": null,\n          \"unit\": null,\n          \"endDate\": null,\n          \"calendar\": null\n        },\n        \"onExpiry\": \"string\",\n        \"terminationReason\": \"string\",\n        \"notifyDaysBefore\": 0,\n        \"alignEndDate\": true\n      },\n      \"subscriptionRenewal\": {\n        \"initialTerm\": 0,\n        \"initialTermType\": \"string\",\n        \"autoRenew\": true,\n        \"renewalTerm\": 0,\n        \"renewalTermType\": \"string\",\n        \"daysNotifyRenewal\": 0,\n        \"endOfTermAction\": \"string\"\n      },\n      \"discountPlanCodes\": [\n        \"string\"\n      ],\n      \"externalOrderOfferNumber\": \"string\",\n      \"deliveryDate\": \"string\",\n      \"terminationDate\": \"string\",\n      \"terminationReasonCode\": \"string\",\n      \"orderProducts\": [\n        {\n          \"orderProductId\": null,\n          \"productCode\": null,\n          \"productVersion\": null,\n          \"productActionType\": null,\n          \"quantity\": null,\n          \"activationDate\": null,\n          \"discountPlanCodes\": null,\n          \"deliveryDate\": null,\n          \"terminationDate\": null,\n          \"terminationReasonCode\": null,\n          \"charges\": null,\n          \"orderAttributes\": null,\n          \"customFields\": null,\n          \"billSeparately\": null,\n          \"suspensionReason\": null,\n          \"extendTermBySuspensionDuration\": null,\n          \"unlinkDiscountPlanCodes\": null,\n          \"removeCharges\": null,\n          \"removeOrderAttributes\": null\n        }\n      ],\n      \"billSeparately\": true,\n      \"tradingCurrencyCode\": \"string\",\n      \"offerAttributes\": [\n        {\n          \"attributeCode\": null,\n          \"stringValue\": null,\n          \"numericValue\": null,\n          \"booleanValue\": null,\n          \"dateValue\": null\n        }\n      ],\n      \"removeOfferAttributes\": [\n        \"string\"\n      ],\n      \"customFields\": {},\n      \"unlinkDiscountPlanCodes\": [\n        \"string\"\n      ],\n      \"removeOrderProducts\": [\n        \"string\"\n      ]\n    }\n  ],\n  \"orderChargeItems\": [\n    {\n      \"externalReference\": \"string\",\n      \"chargeCode\": \"string\",\n      \"subscriptionCode\": \"string\",\n      \"billingAccountCode\": \"string\",\n      \"quantity\": 0,\n      \"priceOverride\": {\n        \"amountWithoutTax\": 0,\n        \"amountWithTax\": 0\n      },\n      \"description\": \"string\",\n      \"applicationDate\": \"string\",\n      \"billSeparately\": true,\n      \"taxInclusive\": true,\n      \"taxClassCode\": \"string\",\n      \"invoicingCalendarCode\": \"string\",\n      \"pricing\": {\n        \"chargeCode\": \"string\",\n        \"description\": \"string\",\n        \"quantity\": 0,\n        \"taxInclusive\": true,\n        \"taxClassCode\": \"string\",\n        \"tradingCurrencyCode\": \"string\",\n        \"invoicingCalendarCode\": \"string\",\n        \"billSeparately\": true,\n        \"pricing\": {\n          \"pricingModel\": null,\n          \"price\": null,\n          \"priceWithTax\": null,\n          \"ratingScriptCode\": null,\n          \"bands\": null,\n          \"matrixColumns\": null,\n          \"matrixCells\": null,\n          \"inputUomCode\": null,\n          \"ratingUomCode\": null,\n          \"unitMultiplicator\": null,\n          \"unitNbDecimal\": null,\n          \"roundingMode\": null,\n          \"price_fx\": null,\n          \"filter_fx\": null,\n          \"total_amount_fx\": null,\n          \"minimum_amount_fx\": null\n        },\n        \"recurring\": {\n          \"calendarCode\": null,\n          \"durationTermInMonth\": null,\n          \"subscriptionProrata\": null,\n          \"terminationProrata\": null,\n          \"prorataOnPriceChange\": null,\n          \"applyInAdvance\": null,\n          \"subscription_prorata_fx\": null,\n          \"termination_prorata_fx\": null,\n          \"apply_in_advance_fx\": null,\n          \"duration_term_in_month_fx\": null,\n          \"calendar_code_fx\": null\n        },\n        \"usage\": {\n          \"filterParam1\": null,\n          \"filterParam2\": null,\n          \"filterParam3\": null,\n          \"filterParam4\": null,\n          \"priority\": null,\n          \"triggerNextCharge\": null,\n          \"ratingPeriodCalendarCode\": null,\n          \"accumulatorType\": null,\n          \"trackedValue\": null,\n          \"initialValue\": null,\n          \"trigger_next_charge_fx\": null,\n          \"acc_filter_fx\": null,\n          \"acc_key_fx\": null,\n          \"acc_value_fx\": null\n        },\n        \"chargeAttributes\": [\n          null\n        ],\n        \"customFields\": {},\n        \"resetFields\": [\n          null\n        ],\n        \"removeChargeAttributes\": [\n          null\n        ]\n      },\n      \"chargeAttributes\": [\n        {\n          \"attributeCode\": null,\n          \"stringValue\": null,\n          \"numericValue\": null,\n          \"booleanValue\": null,\n          \"dateValue\": null\n        }\n      ],\n      \"customFields\": {}\n    }\n  ],\n  \"unlinkDiscountPlanCodes\": [\n    \"string\"\n  ],\n  \"removeOrderOffers\": [\n    \"string\"\n  ],\n  \"removeOrderChargeItems\": [\n    \"string\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "DRAFT-only editor save. Header fields are preserve-on-null (description, orderDate, activationDate, ...). orderOffers upsert: an offer carrying orderOfferId updates that existing line; one without it is appended. remove*/unlink* collection fields apply with the same semantics as create-replay. 409 when the order is not DRAFT."
     }
    },
    {
     "name": "Delete a commercial order (DRAFT only)",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete an order. Rejects with 409 if the order status is not DRAFT. Returns 204 on success."
     }
    },
    {
     "name": "Cancel a commercial order",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code/cancellation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code",
        "cancellation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Cancel an order. Allowed from DRAFT and FINALIZED. Returns 409 if the order is already CANCELED or COMPLETED."
     }
    },
    {
     "name": "Unlink a discount plan from a DRAFT order",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code/discountPlans/:dpCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code",
        "discountPlans",
        ":dpCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "dpCode",
         "value": ""
        }
       ]
      },
      "description": "Unlink a discount plan from the order. The discount plan entity survives; only the order's own link (or its post-validate discount-plan-instance) is removed. Idempotent. 404 only if the parent order is missing; 409 if not DRAFT."
     }
    },
    {
     "name": "Duplicate a commercial order",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code/duplication",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code",
        "duplication"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Duplicate an order. Allowed from any status; always yields a DRAFT copy with a new code."
     }
    },
    {
     "name": "Get an order's target subscription history",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code/history",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code",
        "history"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Resolve the order's target subscription (via its order offer) and return the same field-level change timeline as the subscription history endpoint. Read-only."
     }
    },
    {
     "name": "Remove an order offer from a DRAFT order",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code/orderOffers/:offerCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code",
        "orderOffers",
        ":offerCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "offerCode",
         "value": ""
        }
       ]
      },
      "description": "Remove a single order offer. Idempotent: removing an already-absent offer still returns 204. 404 only if the parent order is missing; 409 if the order is not DRAFT."
     }
    },
    {
     "name": "Remove an order product from a DRAFT order",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code/orderOffers/:offerCode/orderProducts/:productCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code",
        "orderOffers",
        ":offerCode",
        "orderProducts",
        ":productCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "offerCode",
         "value": ""
        },
        {
         "key": "productCode",
         "value": ""
        }
       ]
      },
      "description": "Remove a single order product (line). Idempotent: removing an already-absent product still returns 204. 404 only if the parent order is missing; 409 if the order is not DRAFT."
     }
    },
    {
     "name": "Update a commercial order's progress",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code/progress",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code",
        "progress"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"progress\": 50\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Set the order's progress. The order must be FINALIZED (else 409). Progress must be in [0,100] (else 422) and must be greater than or equal to the current value (else 409). Idempotent: re-sending the same value is a no-op success."
     }
    },
    {
     "name": "Generate an advance invoice for order progress",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code/progressPayment",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code",
        "progressPayment"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Generate an advance invoice for the order's current progress. The order must be FINALIZED (else 409). Returns the generated advance invoice; 409 if there is nothing to invoice."
     }
    },
    {
     "name": "Validate a commercial order",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/orders/:code/validation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orders",
        ":code",
        "validation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"orderCompleted\": false\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Validate an order. Allowed from DRAFT, FINALIZED, or COMPLETED. Returns 409 if the order has an invoicing plan (the client must run the validation plan instead). Sets the order to VALIDATED, or to COMPLETED when orderCompleted is true."
     }
    }
   ]
  },
  {
   "name": "Order Types",
   "item": [
    {
     "name": "List order types",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orderTypes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orderTypes"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of order types, filterable by code, ordered by sortBy/sortOrder. Read-only."
     }
    },
    {
     "name": "Create an order type",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/orderTypes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orderTypes"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"STANDARD\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new order type. A duplicate code is rejected. Use POST /{code} for upsert."
     }
    },
    {
     "name": "Get one order type",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orderTypes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orderTypes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetch a single order type by code. Read-only."
     }
    },
    {
     "name": "Create or update an order type (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/orderTypes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orderTypes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"STANDARD\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the path code: creates the order type if absent, otherwise updates it. Safe to retry."
     }
    },
    {
     "name": "Update an order type",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/orderTypes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orderTypes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"STANDARD\",\n  \"description\": \"string\",\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing order type by code. Partial-update semantics: null keeps the current value. The code is immutable."
     }
    },
    {
     "name": "Delete an order type",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/orderTypes/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "orderTypes",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Delete the order type identified by code. Fails if still referenced. Returns 204 on success."
     }
    }
   ]
  },
  {
   "name": "Account Operations",
   "item": [
    {
     "name": "Create an account operation",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/accountOperations",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "accountOperations"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"INV_STD\",\n  \"type\": \"OCC\",\n  \"transactionCategory\": \"DEBIT\",\n  \"customerAccount\": \"CA_ACME\",\n  \"amount\": 120,\n  \"amountWithoutTax\": 0,\n  \"taxAmount\": 0,\n  \"dueDate\": \"string\",\n  \"transactionDate\": \"string\",\n  \"reference\": \"string\",\n  \"description\": \"string\",\n  \"orderNumber\": \"string\",\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Post a new account operation on a customer account. Required fields: code (OCC template), customerAccount, amount, dueDate. The type defaults to OCC when absent. The referenced OCC template and customer account must already exist. Returns 201 with the created operation."
     }
    }
   ]
  },
  {
   "name": "Payment Timelines",
   "item": [
    {
     "name": "Get the timeline for a DDRequestLOT",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/ddRequestLots/:id/timeline",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "ddRequestLots",
        ":id",
        "timeline"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Aggregate a direct-debit request lot's lifecycle transitions (GENERATED, TRANSMITTED, ACK_RECEIVED, SETTLED, TRANSMISSION_FAILED) and linked bank-file processing history (FILE_RECEIVED) into one chronological list. Read-only."
     }
    },
    {
     "name": "Get the timeline for an invoice",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/billingDocuments/:id/timeline",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "invoices",
        ":id",
        "timeline"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Phase 5 MVP stub: returns an empty event list. Full Invoice -> RecordedInvoice -> MatchingAmount -> payment account-operation cross-entity aggregation is planned (B-NS6). Read-only."
     }
    },
    {
     "name": "Get the timeline for a payment AccountOperation",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/payments/:id/timeline",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "payments",
        ":id",
        "timeline"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Return the PSP webhook events whose affected account operation matches the given payment AO id, in ascending received-at order. Read-only."
     }
    },
    {
     "name": "Get the timeline for a refund AccountOperation",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/refunds/:id/timeline",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "refunds",
        ":id",
        "timeline"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Same payload shape as the payment timeline; refunds and payments share the account-operation table. Read-only."
     }
    }
   ]
  },
  {
   "name": "Bank Transports",
   "item": [
    {
     "name": "List bank transports",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/bankTransports",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bankTransports"
       ],
       "query": [
        {
         "key": "protocol",
         "value": "",
         "disabled": true
        },
        {
         "key": "seller",
         "value": "",
         "disabled": true
        },
        {
         "key": "disabled",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Return a paginated list of bank transports, filterable by protocol, seller, and disabled flag, ordered by sortBy/sortOrder (code ascending by default). Read-only. Secret fields are never returned."
     }
    },
    {
     "name": "Create bank transport",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/bankTransports",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bankTransports"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MAIN_SFTP\",\n  \"description\": \"string\",\n  \"protocol\": \"SFTP\",\n  \"type\": \"NATIF\",\n  \"implementationClassName\": \"string\",\n  \"scriptInstanceCode\": \"string\",\n  \"host\": \"string\",\n  \"port\": 22,\n  \"username\": \"string\",\n  \"secretKey\": \"string\",\n  \"secretKeyKS\": \"string\",\n  \"bankHostKey\": \"string\",\n  \"outboundPath\": \"string\",\n  \"inboundPath\": \"string\",\n  \"archivePath\": \"string\",\n  \"localInboxPath\": \"string\",\n  \"pollIntervalSeconds\": 0,\n  \"maxRetries\": 0,\n  \"retryBackoffSeconds\": 0,\n  \"sellerCode\": \"string\",\n  \"disabled\": true,\n  \"iban\": \"string\",\n  \"bic\": \"string\",\n  \"accountOwner\": \"string\",\n  \"bankName\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Create a new bank transport configuration. A duplicate code returns 409."
     }
    },
    {
     "name": "Get bank transport",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/bankTransports/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bankTransports",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Retrieve a single bank transport by code. Read-only. Secret fields are never returned."
     }
    },
    {
     "name": "Update bank transport",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/bankTransports/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bankTransports",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"MAIN_SFTP\",\n  \"description\": \"string\",\n  \"protocol\": \"SFTP\",\n  \"type\": \"NATIF\",\n  \"implementationClassName\": \"string\",\n  \"scriptInstanceCode\": \"string\",\n  \"host\": \"string\",\n  \"port\": 22,\n  \"username\": \"string\",\n  \"secretKey\": \"string\",\n  \"secretKeyKS\": \"string\",\n  \"bankHostKey\": \"string\",\n  \"outboundPath\": \"string\",\n  \"inboundPath\": \"string\",\n  \"archivePath\": \"string\",\n  \"localInboxPath\": \"string\",\n  \"pollIntervalSeconds\": 0,\n  \"maxRetries\": 0,\n  \"retryBackoffSeconds\": 0,\n  \"sellerCode\": \"string\",\n  \"disabled\": true,\n  \"iban\": \"string\",\n  \"bic\": \"string\",\n  \"accountOwner\": \"string\",\n  \"bankName\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Update an existing bank transport by code. Partial-update semantics: null or absent fields keep the current value, empty strings clear them. Secret fields are only changed when provided."
     }
    },
    {
     "name": "Disable bank transport",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/bankTransports/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bankTransports",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Soft-delete a bank transport (sets disabled = true). Returns 204 on success."
     }
    },
    {
     "name": "Test bank transport connection",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/bankTransports/:code/testConnection",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "bankTransports",
        ":code",
        "testConnection"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Dry-run probe: instantiates the transport, opens a connection, and lists the configured outbound/inbound paths. Never throws; connection failures are encoded in the result body (success=false), so the HTTP status is 200 even when the probe fails."
     }
    }
   ]
  },
  {
   "name": "Payment Webhooks",
   "item": [
    {
     "name": "List payment webhook events",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/paymentWebhookEvents",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "paymentWebhookEvents"
       ],
       "query": [
        {
         "key": "gatewayCode",
         "value": "",
         "disabled": true
        },
        {
         "key": "status",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Admin audit list of received webhooks. Filter by gatewayCode and/or processing status; paginated. Read-only."
     }
    },
    {
     "name": "Get a payment webhook event",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/paymentWebhookEvents/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "paymentWebhookEvents",
        ":id"
       ],
       "query": [
        {
         "key": "includePayload",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Retrieve a single audit row. Set ?includePayload=true to include the raw PSP payload (omitted by default to keep responses light). Read-only."
     }
    },
    {
     "name": "Replay a failed payment webhook event",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/paymentWebhookEvents/:id/replay",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "paymentWebhookEvents",
        ":id",
        "replay"
       ],
       "variable": [
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Re-parse the stored raw payload and re-queue it for async processing. Only events in FAILED status can be replayed; replaying an event in any other status returns 409."
     }
    },
    {
     "name": "Receive a PSP webhook",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/paymentWebhooks/:gatewayCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "paymentWebhooks",
        ":gatewayCode"
       ],
       "variable": [
        {
         "key": "gatewayCode",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "\"string\"",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Public endpoint — authenticity verified by per-PSP signature. Returns 2xx fast (<3s budget), persists an audit row regardless of signature validity, and hands the parsed event to the async processor."
     }
    }
   ]
  },
  {
   "name": "Permissions",
   "item": [
    {
     "name": "List the capability catalog",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/permissions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "permissions"
       ]
      },
      "description": "Returns every realm role and app client role known to Keycloak as a flat capability catalog. Read-only: there is no POST /api/v1/permissions, since the catalog is defined by the roles that exist."
     }
    }
   ]
  },
  {
   "name": "Providers",
   "item": [
    {
     "name": "List providers",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/providers",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "providers"
       ]
      },
      "description": "Returns the provider settings. There is a single provider row per tenant."
     }
    },
    {
     "name": "Get provider settings by code",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/providers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "providers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches the provider settings identified by the provider code."
     }
    },
    {
     "name": "Update provider settings",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/providers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "providers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"currency\": \"string\",\n  \"country\": \"string\",\n  \"language\": \"string\",\n  \"multiCurrency\": true,\n  \"multiCountry\": true,\n  \"multiLanguage\": true,\n  \"userAccount\": \"string\",\n  \"enterprise\": true,\n  \"levelDuplication\": true,\n  \"rounding\": 0,\n  \"roundingMode\": \"NEAREST\",\n  \"invoiceRounding\": 0,\n  \"invoiceRoundingMode\": \"NEAREST\",\n  \"prepaidReservationExpirationDelayinMillisec\": 0,\n  \"discountAccountingCode\": \"string\",\n  \"email\": \"string\",\n  \"bankCoordinates\": {\n    \"bankCode\": \"string\",\n    \"branchCode\": \"string\",\n    \"accountNumber\": \"string\",\n    \"key\": \"string\",\n    \"iban\": \"string\",\n    \"bic\": \"string\",\n    \"accountOwner\": \"string\",\n    \"bankName\": \"string\",\n    \"bankId\": \"string\",\n    \"issuerNumber\": \"string\",\n    \"issuerName\": \"string\",\n    \"ics\": \"string\",\n    \"empty\": true\n  },\n  \"paymentPlanPolicy\": {\n    \"defaultInstallmentCount\": 0,\n    \"maxPaymentPlanDuration\": 0,\n    \"defaultFeePerInstallmentPlan\": 0,\n    \"installmentAmountRounding\": 0,\n    \"defaultInterestRate\": 0,\n    \"minAllowedReceivableAmount\": 0,\n    \"maxAllowedReceivableAmount\": 0,\n    \"minInstallmentAmount\": 0,\n    \"theresHoldForApproval\": 0,\n    \"splitEvenly\": true,\n    \"allowCustomInstallmentPlan\": true,\n    \"addInterestRate\": true,\n    \"addInstallmentFee\": true,\n    \"defaultBlockPayments\": true,\n    \"requireInternalApproval\": true,\n    \"defaultRecurrenceUnit\": \"MONTH\",\n    \"actionOnRemainingAmount\": \"FIRST\",\n    \"clearingPriority\": \"NEWEST\",\n    \"allowedPaymentMethods\": [\n      \"CHECK\"\n    ],\n    \"dunningDefaultPauseReason\": 0,\n    \"defaultStartingDateOfPlan\": \"TODAY\",\n    \"allowedCreditCategories\": [\n      0\n    ]\n  },\n  \"recognizeRevenue\": true,\n  \"invoiceConfiguration\": {\n    \"displaySubscriptions\": true,\n    \"displayServices\": true,\n    \"displayOffers\": true,\n    \"displayEdrs\": true,\n    \"displayProvider\": true,\n    \"displayCfAsXML\": true,\n    \"displayPricePlans\": true,\n    \"displayDetail\": true,\n    \"displayChargesPeriods\": true,\n    \"displayBillingCycle\": true,\n    \"displayFreeTransacInInvoice\": true,\n    \"displayOrders\": true,\n    \"displayRatedItems\": true,\n    \"currentInvoiceNb\": 0,\n    \"displayWalletOperations\": true,\n    \"defaultInvoiceSubcategoryCode\": \"string\",\n    \"defaultGenericArticleCode\": \"string\",\n    \"defaultDiscountArticleCode\": \"string\",\n    \"defaultAdvancedPaymentArticleCode\": \"string\",\n    \"defaultInvoiceMinimumArticleCode\": \"string\",\n    \"displayUserAccountHierarchy\": true,\n    \"displayTaxDetails\": true\n  },\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  },\n  \"cdrDeduplicationKeyEL\": \"string\",\n  \"isoICDCode\": \"string\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates the provider settings. Partial-update semantics: a null field keeps the stored value."
     }
    }
   ]
  },
  {
   "name": "Query",
   "item": [
    {
     "name": "List queryable entities",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/entities",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "query",
        "entities"
       ],
       "query": [
        {
         "key": "onlyBusinessEntities",
         "value": "",
         "disabled": true
        },
        {
         "key": "onlyHugeEntities",
         "value": "",
         "disabled": true
        },
        {
         "key": "withFullName",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns the JPA entity names the query API can address, optionally narrowed to business entities or to the large (huge) entities flagged for restricted querying. By default the entities array is a plain list of simple names, e.g. [\"Invoice\", \"Seller\"]. Pass withFullName=true to get [{\"name\": \"Invoice\", \"fullName\": \"org.meveo.model.billing.Invoice\"}, ...] instead, exposing the fully qualified class name for callers (e.g. code generators) that need it."
     }
    },
    {
     "name": "Get the field and DB mapping of one entity",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/entities/:entity",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "query",
        "entities",
        ":entity"
       ],
       "variable": [
        {
         "key": "entity",
         "value": ""
        }
       ]
      },
      "description": "Describes an entity's queryable fields and their database column mapping, for schema discovery and building filters/field selections dynamically."
     }
    },
    {
     "name": "List records for an entity (GET dialect)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/:entity",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "query",
        ":entity"
       ],
       "query": [
        {
         "key": "filters",
         "value": "",
         "disabled": true
        },
        {
         "key": "fields",
         "value": "",
         "disabled": true
        },
        {
         "key": "nested",
         "value": "",
         "disabled": true
        },
        {
         "key": "depth",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        },
        {
         "key": "joinType",
         "value": "",
         "disabled": true
        },
        {
         "key": "groupBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "having",
         "value": "",
         "disabled": true
        },
        {
         "key": "excluding",
         "value": "",
         "disabled": true
        },
        {
         "key": "forceCount",
         "value": "",
         "disabled": true
        },
        {
         "key": "extractList",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "entity",
         "value": ""
        }
       ]
      },
      "description": "Lists records of the named entity using the GET dialect. filters, fields, nested, groupBy, having, and excluding are parsed into the same GenericPagingAndFiltering shape the POST body builds. Returns a paginated envelope: {\"total\": N, \"limit\": L, \"offset\": O, \"data\": [ ... ]} unless extractList narrows it."
     }
    },
    {
     "name": "List records for an entity (POST dialect)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/query/:entity",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "query",
        ":entity"
       ],
       "query": [
        {
         "key": "extractList",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "entity",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"genericFieldDetails\": [\n    {\n      \"transformation\": \"string\",\n      \"mappings\": {},\n      \"formulaInputs\": \"string\",\n      \"formula\": \"string\",\n      \"name\": \"string\",\n      \"header\": \"string\"\n    }\n  ],\n  \"genericFields\": [\n    \"string\"\n  ],\n  \"nestedEntities\": [\n    \"string\"\n  ],\n  \"nestedDepth\": 0,\n  \"excluding\": [\n    \"string\"\n  ],\n  \"groupBy\": [\n    \"string\"\n  ],\n  \"having\": [\n    \"string\"\n  ],\n  \"translations\": {},\n  \"joinType\": \"INNER\",\n  \"forceCount\": true,\n  \"isFilter\": true,\n  \"fullTextFilter\": \"string\",\n  \"sortBy\": \"string\",\n  \"sortOrder\": \"string\",\n  \"total\": 0,\n  \"limit\": 0,\n  \"filters\": {},\n  \"offset\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Same as the GET list but the full query is sent as a GenericPagingAndFiltering JSON body, identical to the payload the legacy generic API accepts. Preferred when filters are large or deeply nested."
     }
    },
    {
     "name": "Count records for an entity (GET dialect)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/:entity/count",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "query",
        ":entity",
        "count"
       ],
       "query": [
        {
         "key": "filters",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "entity",
         "value": ""
        }
       ]
      },
      "description": "Returns the number of records of the entity that match the filters. Response is a small JSON object with the count."
     }
    },
    {
     "name": "Count records for an entity (POST dialect)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/query/:entity/count",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "query",
        ":entity",
        "count"
       ],
       "variable": [
        {
         "key": "entity",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"genericFieldDetails\": [\n    {\n      \"transformation\": \"string\",\n      \"mappings\": {},\n      \"formulaInputs\": \"string\",\n      \"formula\": \"string\",\n      \"name\": \"string\",\n      \"header\": \"string\"\n    }\n  ],\n  \"genericFields\": [\n    \"string\"\n  ],\n  \"nestedEntities\": [\n    \"string\"\n  ],\n  \"nestedDepth\": 0,\n  \"excluding\": [\n    \"string\"\n  ],\n  \"groupBy\": [\n    \"string\"\n  ],\n  \"having\": [\n    \"string\"\n  ],\n  \"translations\": {},\n  \"joinType\": \"INNER\",\n  \"forceCount\": true,\n  \"isFilter\": true,\n  \"fullTextFilter\": \"string\",\n  \"sortBy\": \"string\",\n  \"sortOrder\": \"string\",\n  \"total\": 0,\n  \"limit\": 0,\n  \"filters\": {},\n  \"offset\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Counts records matching the filters carried in a GenericPagingAndFiltering JSON body."
     }
    },
    {
     "name": "Get a single record by numeric id (GET dialect)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/query/:entity/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "query",
        ":entity",
        ":id"
       ],
       "query": [
        {
         "key": "fields",
         "value": "",
         "disabled": true
        },
        {
         "key": "nested",
         "value": "",
         "disabled": true
        },
        {
         "key": "depth",
         "value": "",
         "disabled": true
        },
        {
         "key": "extractList",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "entity",
         "value": ""
        },
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "description": "Fetches one record by its numeric technical id, with optional field projection and nested loading."
     }
    },
    {
     "name": "Get a single record by numeric id (POST dialect)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/query/:entity/:id",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "query",
        ":entity",
        ":id"
       ],
       "query": [
        {
         "key": "extractList",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "entity",
         "value": ""
        },
        {
         "key": "id",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"genericFieldDetails\": [\n    {\n      \"transformation\": \"string\",\n      \"mappings\": {},\n      \"formulaInputs\": \"string\",\n      \"formula\": \"string\",\n      \"name\": \"string\",\n      \"header\": \"string\"\n    }\n  ],\n  \"genericFields\": [\n    \"string\"\n  ],\n  \"nestedEntities\": [\n    \"string\"\n  ],\n  \"nestedDepth\": 0,\n  \"excluding\": [\n    \"string\"\n  ],\n  \"groupBy\": [\n    \"string\"\n  ],\n  \"having\": [\n    \"string\"\n  ],\n  \"translations\": {},\n  \"joinType\": \"INNER\",\n  \"forceCount\": true,\n  \"isFilter\": true,\n  \"fullTextFilter\": \"string\",\n  \"sortBy\": \"string\",\n  \"sortOrder\": \"string\",\n  \"total\": 0,\n  \"limit\": 0,\n  \"filters\": {},\n  \"offset\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Fetches one record by id, with field selection and nested loading supplied in a GenericPagingAndFiltering JSON body."
     }
    }
   ]
  },
  {
   "name": "Roles",
   "item": [
    {
     "name": "List roles",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/roles",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "roles"
       ],
       "query": [
        {
         "key": "expand",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of roles. The expand parameter opts into extra retrieval fields."
     }
    },
    {
     "name": "Create a role",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/roles",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "roles"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ADMINISTRATEUR\",\n  \"description\": \"string\",\n  \"childRoles\": [\n    \"string\"\n  ],\n  \"securedEntities\": [\n    {\n      \"id\": 0,\n      \"entityId\": 0,\n      \"entityCode\": \"string\",\n      \"entityClass\": \"string\",\n      \"permission\": \"READ\",\n      \"disabled\": true\n    }\n  ],\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new role. Returns 409 when a role with the same name already exists; use POST /{code} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get a role by code",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/roles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "roles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single role by its name (code), including its child roles."
     }
    },
    {
     "name": "Create or update a role (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/roles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "roles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ADMINISTRATEUR\",\n  \"description\": \"string\",\n  \"childRoles\": [\n    \"string\"\n  ],\n  \"securedEntities\": [\n    {\n      \"id\": 0,\n      \"entityId\": 0,\n      \"entityCode\": \"string\",\n      \"entityClass\": \"string\",\n      \"permission\": \"READ\",\n      \"disabled\": true\n    }\n  ],\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the role code in the path. Returns 201 when it creates a new role and 200 when it updates an existing one."
     }
    },
    {
     "name": "Update a role",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/roles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "roles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"ADMINISTRATEUR\",\n  \"description\": \"string\",\n  \"childRoles\": [\n    \"string\"\n  ],\n  \"securedEntities\": [\n    {\n      \"id\": 0,\n      \"entityId\": 0,\n      \"entityCode\": \"string\",\n      \"entityClass\": \"string\",\n      \"permission\": \"READ\",\n      \"disabled\": true\n    }\n  ],\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing role. Partial-update semantics: a null field keeps the stored value."
     }
    },
    {
     "name": "Delete a role",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/roles/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "roles",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the role identified by the code."
     }
    },
    {
     "name": "Add a child (composite) role",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/roles/:code/childRoles/:childCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "roles",
        ":code",
        "childRoles",
        ":childCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "childCode",
         "value": ""
        }
       ]
      },
      "description": "Attaches childCode as a composite child of the role identified by code. Backed by Keycloak addComposites; the parent role is created if it does not exist yet. See ADR-v1-iam.md, section 2."
     }
    },
    {
     "name": "Remove a child (composite) role",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/roles/:code/childRoles/:childCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "roles",
        ":code",
        "childRoles",
        ":childCode"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        },
        {
         "key": "childCode",
         "value": ""
        }
       ]
      },
      "description": "Detaches childCode from the role identified by code. Backed by Keycloak deleteComposites. Returns 422 when childCode is not currently a composite child of code. See ADR-v1-iam.md, section 2."
     }
    },
    {
     "name": "Get a role's permissions (read-only)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/roles/:code/permissions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "roles",
        ":code",
        "permissions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns the role's permissions. Read-only: there is no permission store on the Role entity today, so this mirrors the legacy fields=permissions retrieval flag and returns whatever it exposes."
     }
    }
   ]
  },
  {
   "name": "Sellers",
   "item": [
    {
     "name": "List sellers",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/sellers",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "sellers"
       ],
       "query": [
        {
         "key": "code",
         "value": "",
         "disabled": true
        },
        {
         "key": "description",
         "value": "",
         "disabled": true
        },
        {
         "key": "tradingCountryCode",
         "value": "",
         "disabled": true
        },
        {
         "key": "tradingCurrencyCode",
         "value": "",
         "disabled": true
        },
        {
         "key": "tradingLanguageCode",
         "value": "",
         "disabled": true
        },
        {
         "key": "parentSellerCode",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of sellers. All query filters are exact-match and combine with AND. Omitted filters are ignored."
     }
    },
    {
     "name": "Create seller",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/sellers",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "sellers"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"code\": \"MAIN_SELLER\",\n  \"description\": \"Main Seller\",\n  \"tradingCountryCode\": \"FR\",\n  \"tradingCurrencyCode\": \"EUR\",\n  \"tradingLanguageCode\": \"FRA\",\n  \"parentSellerCode\": \"GROUP_SELLER\",\n  \"vatNo\": \"FR12345678901\",\n  \"legalType\": \"SAS\",\n  \"billingTemplateName\": \"custom_invoice\",\n  \"address\": {\n    \"address1\": \"1 rue de la Paix\",\n    \"address2\": \"string\",\n    \"address3\": \"string\",\n    \"zipCode\": \"75002\",\n    \"city\": \"Paris\",\n    \"country\": \"FR\",\n    \"state\": \"string\"\n  },\n  \"contactInformation\": {\n    \"email\": \"billing@example.com\",\n    \"phone\": \"string\",\n    \"mobile\": \"string\",\n    \"fax\": \"string\"\n  },\n  \"registrationNumbers\": [\n    {\n      \"registrationNo\": \"552081317\",\n      \"isoIcdCode\": \"0002\"\n    }\n  ],\n  \"customerSequences\": [\n    {\n      \"code\": \"CUST_SEQ\",\n      \"description\": \"string\",\n      \"prefix\": \"CUS\",\n      \"sequenceSize\": 6,\n      \"currentNumber\": 1042\n    }\n  ],\n  \"invoiceTypeSequences\": [\n    {\n      \"invoiceTypeCode\": \"COMMERCIAL\",\n      \"invoiceSequenceCode\": \"INV_SEQ\",\n      \"prefix_fx\": \"'INV'+seller.code\"\n    }\n  ],\n  \"mediaCodes\": [\n    \"string\"\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new seller. Fails if a seller with the same code already exists; use POST /{code} for create-or-update semantics. Referenced trading entities and parent seller must exist."
     }
    },
    {
     "name": "Get seller",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/sellers/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "sellers",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single seller by its functional code or numeric technical id, including address, contact, sequences, registration numbers, media codes, and custom fields."
     }
    },
    {
     "name": "Create or update seller (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/sellers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "sellers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"code\": \"MAIN_SELLER\",\n  \"description\": \"Main Seller\",\n  \"tradingCountryCode\": \"FR\",\n  \"tradingCurrencyCode\": \"EUR\",\n  \"tradingLanguageCode\": \"FRA\",\n  \"parentSellerCode\": \"GROUP_SELLER\",\n  \"vatNo\": \"FR12345678901\",\n  \"legalType\": \"SAS\",\n  \"billingTemplateName\": \"custom_invoice\",\n  \"address\": {\n    \"address1\": \"1 rue de la Paix\",\n    \"address2\": \"string\",\n    \"address3\": \"string\",\n    \"zipCode\": \"75002\",\n    \"city\": \"Paris\",\n    \"country\": \"FR\",\n    \"state\": \"string\"\n  },\n  \"contactInformation\": {\n    \"email\": \"billing@example.com\",\n    \"phone\": \"string\",\n    \"mobile\": \"string\",\n    \"fax\": \"string\"\n  },\n  \"registrationNumbers\": [\n    {\n      \"registrationNo\": \"552081317\",\n      \"isoIcdCode\": \"0002\"\n    }\n  ],\n  \"customerSequences\": [\n    {\n      \"code\": \"CUST_SEQ\",\n      \"description\": \"string\",\n      \"prefix\": \"CUS\",\n      \"sequenceSize\": 6,\n      \"currentNumber\": 1042\n    }\n  ],\n  \"invoiceTypeSequences\": [\n    {\n      \"invoiceTypeCode\": \"COMMERCIAL\",\n      \"invoiceSequenceCode\": \"INV_SEQ\",\n      \"prefix_fx\": \"'INV'+seller.code\"\n    }\n  ],\n  \"mediaCodes\": [\n    \"string\"\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the seller code in the path. Creates the seller if absent, otherwise updates it. The path code wins over any code in the body. Collection fields follow v1 null/empty semantics: null keeps the stored value, an empty array clears it. Returns 200 with the resulting seller."
     }
    },
    {
     "name": "Update seller",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/sellers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "sellers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"code\": \"MAIN_SELLER\",\n  \"description\": \"Main Seller\",\n  \"tradingCountryCode\": \"FR\",\n  \"tradingCurrencyCode\": \"EUR\",\n  \"tradingLanguageCode\": \"FRA\",\n  \"parentSellerCode\": \"GROUP_SELLER\",\n  \"vatNo\": \"FR12345678901\",\n  \"legalType\": \"SAS\",\n  \"billingTemplateName\": \"custom_invoice\",\n  \"address\": {\n    \"address1\": \"1 rue de la Paix\",\n    \"address2\": \"string\",\n    \"address3\": \"string\",\n    \"zipCode\": \"75002\",\n    \"city\": \"Paris\",\n    \"country\": \"FR\",\n    \"state\": \"string\"\n  },\n  \"contactInformation\": {\n    \"email\": \"billing@example.com\",\n    \"phone\": \"string\",\n    \"mobile\": \"string\",\n    \"fax\": \"string\"\n  },\n  \"registrationNumbers\": [\n    {\n      \"registrationNo\": \"552081317\",\n      \"isoIcdCode\": \"0002\"\n    }\n  ],\n  \"customerSequences\": [\n    {\n      \"code\": \"CUST_SEQ\",\n      \"description\": \"string\",\n      \"prefix\": \"CUS\",\n      \"sequenceSize\": 6,\n      \"currentNumber\": 1042\n    }\n  ],\n  \"invoiceTypeSequences\": [\n    {\n      \"invoiceTypeCode\": \"COMMERCIAL\",\n      \"invoiceSequenceCode\": \"INV_SEQ\",\n      \"prefix_fx\": \"'INV'+seller.code\"\n    }\n  ],\n  \"mediaCodes\": [\n    \"string\"\n  ],\n  \"customFields\": {}\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing seller. Partial-update semantics: a null scalar keeps the stored value, an empty string clears it; a null collection keeps it, an empty array clears it. The path code identifies the target."
     }
    },
    {
     "name": "Delete seller",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/sellers/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "sellers",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Deletes the seller identified by the code. Fails if the seller is still referenced by accounts or invoices."
     }
    }
   ]
  },
  {
   "name": "Settings",
   "item": [
    {
     "name": "List system properties",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/settings/properties",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "settings",
        "properties"
       ]
      },
      "description": "Returns the effective system properties as a list of key/value entries."
     }
    },
    {
     "name": "Update system properties",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/settings/properties",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "settings",
        "properties"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"properties\": [\n    {\n      \"key\": \"invoicing.invoiceNumbering.enabled\",\n      \"value\": \"true\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Applies one or more system property key/value entries, one call to ConfigurationApi.setProperty per entry, then persists them. The properties list must be non-empty and every entry must carry a non-blank key. Returns the resulting effective properties."
     }
    }
   ]
  },
  {
   "name": "System",
   "item": [
    {
     "name": "Health check",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/health",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "health"
       ]
      },
      "description": "Liveness probe. Returns 200 with a small JSON object {\"status\":\"UP\"} when the application is serving requests. Does not touch the database or downstream services."
     }
    },
    {
     "name": "Get application version",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/version",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "version"
       ]
      },
      "description": "Returns build information for the running instance: application name, API version, and build version. Values are read once from a bundled version resource and cached; the response falls back to {\"name\":\"Billerang\",\"apiVersion\":\"v1\",\"version\":\"unknown\"} when that resource is absent."
     }
    }
   ]
  },
  {
   "name": "Trading Countries",
   "item": [
    {
     "name": "List trading countries",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCountries",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCountries"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of trading countries. Sorting is limited to a fixed whitelist; any unknown sortBy value falls back to id."
     }
    },
    {
     "name": "Create a trading country",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCountries",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCountries"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"countryCode\": \"FR\",\n  \"description\": \"France\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new trading country for the given ISO country code. Fails if one already exists for that code; use POST /{code} for create-or-update semantics."
     }
    },
    {
     "name": "Get a trading country",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCountries/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCountries",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single trading country by its ISO country code or its numeric technical id. A purely numeric path segment is tried as an id first, then falls back to a code lookup."
     }
    },
    {
     "name": "Create or update a trading country (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCountries/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCountries",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"countryCode\": \"FR\",\n  \"description\": \"France\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the ISO country code in the path. Creates the trading country if absent, otherwise updates it. The path code always wins over any countryCode in the body. Returns 200 in both cases."
     }
    },
    {
     "name": "Update a trading country",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCountries/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCountries",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"countryCode\": \"FR\",\n  \"description\": \"France\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing trading country. Partial-update semantics: a null field keeps the stored value, an empty string clears it. The path code identifies the target and overrides any countryCode in the body."
     }
    },
    {
     "name": "Delete a trading country",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCountries/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCountries",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the trading country identified by the ISO code. The underlying reference Country is not deleted."
     }
    },
    {
     "name": "Activate a trading country",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCountries/:code/activation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCountries",
        ":code",
        "activation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Enables the trading country (sets disabled=false). Returns the resulting resource."
     }
    },
    {
     "name": "Deactivate a trading country",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCountries/:code/deactivation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCountries",
        ":code",
        "deactivation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Disables the trading country (sets disabled=true). Returns the resulting resource."
     }
    }
   ]
  },
  {
   "name": "Trading Currencies",
   "item": [
    {
     "name": "List trading currencies",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCurrencies",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCurrencies"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of trading currencies, newest reference join fetched. Sorting is limited to a fixed whitelist (currencyCode, description, symbol, disabled); any other value falls back to id."
     }
    },
    {
     "name": "Create a trading currency",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCurrencies",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCurrencies"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"currencyCode\": \"EUR\",\n  \"description\": \"Euro\",\n  \"symbol\": \"\\u20ac\",\n  \"decimalPlaces\": 2\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new trading currency for the given ISO currency code. Fails if one already exists for that code; use POST /{code} for create-or-update semantics."
     }
    },
    {
     "name": "Get a trading currency",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCurrencies/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCurrencies",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single trading currency by its ISO currency code or its numeric technical id. A purely numeric path segment is tried as an id first, then falls back to a code lookup."
     }
    },
    {
     "name": "Create or update a trading currency (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCurrencies/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCurrencies",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"currencyCode\": \"EUR\",\n  \"description\": \"Euro\",\n  \"symbol\": \"\\u20ac\",\n  \"decimalPlaces\": 2\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the ISO currency code in the path. Creates the trading currency if absent, otherwise updates it. The path code always wins over any currencyCode in the body. Returns 200 with the resulting resource in both cases."
     }
    },
    {
     "name": "Update a trading currency",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCurrencies/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCurrencies",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"currencyCode\": \"EUR\",\n  \"description\": \"Euro\",\n  \"symbol\": \"\\u20ac\",\n  \"decimalPlaces\": 2\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing trading currency. Partial-update semantics: a null field keeps the stored value, an empty string clears it. The path code identifies the target and overrides any currencyCode in the body."
     }
    },
    {
     "name": "Delete a trading currency",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCurrencies/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCurrencies",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the trading currency identified by the ISO code. The underlying reference Currency is not deleted."
     }
    },
    {
     "name": "Activate a trading currency",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCurrencies/:code/activation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCurrencies",
        ":code",
        "activation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Enables the trading currency (sets disabled=false). Returns the resulting resource."
     }
    },
    {
     "name": "Deactivate a trading currency",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingCurrencies/:code/deactivation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingCurrencies",
        ":code",
        "deactivation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Disables the trading currency (sets disabled=true). Returns the resulting resource."
     }
    }
   ]
  },
  {
   "name": "Trading Languages",
   "item": [
    {
     "name": "List trading languages",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingLanguages",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingLanguages"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of trading languages. Sorting is limited to a fixed whitelist; any unknown sortBy value falls back to id."
     }
    },
    {
     "name": "Create a trading language",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingLanguages",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingLanguages"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"languageCode\": \"FRA\",\n  \"description\": \"French\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new trading language for the given ISO language code. Fails if one already exists for that code; use POST /{code} for create-or-update semantics."
     }
    },
    {
     "name": "Get a trading language",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingLanguages/:codeOrId",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingLanguages",
        ":codeOrId"
       ],
       "variable": [
        {
         "key": "codeOrId",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single trading language by its ISO language code or its numeric technical id. A purely numeric path segment is tried as an id first, then falls back to a code lookup."
     }
    },
    {
     "name": "Create or update a trading language (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingLanguages/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingLanguages",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"languageCode\": \"FRA\",\n  \"description\": \"French\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the ISO language code in the path. Creates the trading language if absent, otherwise updates it. The path code always wins over any languageCode in the body. Returns 200 in both cases."
     }
    },
    {
     "name": "Update a trading language",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingLanguages/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingLanguages",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"auditable\": {\n    \"created\": \"string\",\n    \"creator\": \"string\",\n    \"updated\": \"string\",\n    \"updater\": \"string\"\n  },\n  \"languageCode\": \"FRA\",\n  \"description\": \"French\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing trading language. Partial-update semantics: a null field keeps the stored value, an empty string clears it. The path code identifies the target and overrides any languageCode in the body."
     }
    },
    {
     "name": "Delete a trading language",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingLanguages/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingLanguages",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the trading language identified by the ISO code. The underlying reference Language is not deleted."
     }
    },
    {
     "name": "Activate a trading language",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingLanguages/:code/activation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingLanguages",
        ":code",
        "activation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Enables the trading language (sets disabled=false). Returns the resulting resource."
     }
    },
    {
     "name": "Deactivate a trading language",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/tradingLanguages/:code/deactivation",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "tradingLanguages",
        ":code",
        "deactivation"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Disables the trading language (sets disabled=true). Returns the resulting resource."
     }
    }
   ]
  },
  {
   "name": "Users",
   "item": [
    {
     "name": "List users",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/users",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users"
       ],
       "query": [
        {
         "key": "roles",
         "value": "",
         "disabled": true
        },
        {
         "key": "userLevel",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of users, optionally filtered by role and user level."
     }
    },
    {
     "name": "Create a user",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/users",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"username\": \"jdoe\",\n  \"email\": \"jdoe@example.com\",\n  \"firstName\": \"Jane\",\n  \"lastName\": \"Doe\",\n  \"roles\": [\n    \"string\"\n  ],\n  \"userLevel\": \"string\",\n  \"disabled\": false,\n  \"password\": \"string\",\n  \"securedEntities\": [\n    {\n      \"id\": 0,\n      \"entityId\": 0,\n      \"entityCode\": \"string\",\n      \"entityClass\": \"string\",\n      \"permission\": \"READ\",\n      \"disabled\": true\n    }\n  ],\n  \"clientRoles\": {},\n  \"attributes\": {},\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  },\n  \"replaceRoles\": false\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new user in the database and Keycloak. Returns 409 when the username already exists; use POST /{username} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get the caller's own user",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/users/me",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        "me"
       ]
      },
      "description": "Returns the user record for the authenticated caller, derived from the token username."
     }
    },
    {
     "name": "Get the caller's profile picture",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/users/me/profilePicture",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        "me",
        "profilePicture"
       ]
      },
      "description": "Returns the authenticated caller's profile picture as image bytes, or a JSON error when none is set."
     }
    },
    {
     "name": "Set the caller's profile picture",
     "request": {
      "method": "PUT",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/users/me/profilePicture",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        "me",
        "profilePicture"
       ]
      },
      "description": "Stores the raw PNG or JPEG bytes as the authenticated caller's profile picture."
     }
    },
    {
     "name": "Get a user by username",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/users/:username",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":username"
       ],
       "variable": [
        {
         "key": "username",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single user by username."
     }
    },
    {
     "name": "Create or update a user (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/users/:username",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":username"
       ],
       "variable": [
        {
         "key": "username",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"username\": \"jdoe\",\n  \"email\": \"jdoe@example.com\",\n  \"firstName\": \"Jane\",\n  \"lastName\": \"Doe\",\n  \"roles\": [\n    \"string\"\n  ],\n  \"userLevel\": \"string\",\n  \"disabled\": false,\n  \"password\": \"string\",\n  \"securedEntities\": [\n    {\n      \"id\": 0,\n      \"entityId\": 0,\n      \"entityCode\": \"string\",\n      \"entityClass\": \"string\",\n      \"permission\": \"READ\",\n      \"disabled\": true\n    }\n  ],\n  \"clientRoles\": {},\n  \"attributes\": {},\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  },\n  \"replaceRoles\": false\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the username in the path. Returns 201 when it creates a new user and 200 when it updates an existing one."
     }
    },
    {
     "name": "Update a user",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/users/:username",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":username"
       ],
       "variable": [
        {
         "key": "username",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"username\": \"jdoe\",\n  \"email\": \"jdoe@example.com\",\n  \"firstName\": \"Jane\",\n  \"lastName\": \"Doe\",\n  \"roles\": [\n    \"string\"\n  ],\n  \"userLevel\": \"string\",\n  \"disabled\": false,\n  \"password\": \"string\",\n  \"securedEntities\": [\n    {\n      \"id\": 0,\n      \"entityId\": 0,\n      \"entityCode\": \"string\",\n      \"entityClass\": \"string\",\n      \"permission\": \"READ\",\n      \"disabled\": true\n    }\n  ],\n  \"clientRoles\": {},\n  \"attributes\": {},\n  \"customFields\": {\n    \"customField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ],\n    \"inheritedCustomField\": [\n      {\n        \"code\": \"string\",\n        \"description\": \"string\",\n        \"fieldType\": \"STRING\",\n        \"languageDescriptions\": [\n          null\n        ],\n        \"valueDate\": \"string\",\n        \"valuePeriodStartDate\": \"string\",\n        \"valuePeriodEndDate\": \"string\",\n        \"valuePeriodPriority\": 0,\n        \"stringValue\": \"string\",\n        \"dateValue\": \"string\",\n        \"longValue\": 0,\n        \"doubleValue\": 0,\n        \"booleanValue\": true,\n        \"mapValue\": {},\n        \"entityReferenceValue\": {\n          \"classname\": null,\n          \"code\": null,\n          \"id\": null,\n          \"empty\": null\n        },\n        \"valueConverted\": {},\n        \"indexType\": \"STORE_ONLY\",\n        \"fileValue\": \"string\",\n        \"formattedValue\": {\n          \"id\": null,\n          \"code\": null,\n          \"description\": null,\n          \"updatedCode\": null,\n          \"singleValue\": null,\n          \"listValue\": null,\n          \"mapValue\": null\n        },\n        \"urlReferenceValue\": {\n          \"url\": null,\n          \"regexp\": null,\n          \"label\": null,\n          \"length\": null,\n          \"empty\": null\n        },\n        \"guiPosition\": \"string\",\n        \"customTableCode\": \"string\",\n        \"dataFilter\": \"string\",\n        \"fields\": \"string\",\n        \"applicableOnEl\": true,\n        \"applicableOnElExpression\": \"string\",\n        \"value\": [\n          null\n        ]\n      }\n    ]\n  },\n  \"replaceRoles\": false\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing user. Partial-update semantics: a null field keeps the stored value. replaceRoles in the body controls whether the roles list replaces or appends."
     }
    },
    {
     "name": "Delete a user",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/users/:username",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":username"
       ],
       "variable": [
        {
         "key": "username",
         "value": ""
        }
       ]
      },
      "description": "Deletes the user from both the database and Keycloak."
     }
    },
    {
     "name": "Get a user's profile picture",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/users/:username/profilePicture",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":username",
        "profilePicture"
       ],
       "variable": [
        {
         "key": "username",
         "value": ""
        }
       ]
      },
      "description": "Returns the named user's profile picture as image bytes, or a JSON error when none is set."
     }
    },
    {
     "name": "Add one role to a user",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/users/:username/roles/:roleCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":username",
        "roles",
        ":roleCode"
       ],
       "variable": [
        {
         "key": "username",
         "value": ""
        },
        {
         "key": "roleCode",
         "value": ""
        }
       ]
      },
      "description": "Appends a single role to the user's roles. Modeled as a role membership sub-resource; idempotent when the role is already present."
     }
    },
    {
     "name": "Remove one role from a user",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/users/:username/roles/:roleCode",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "users",
        ":username",
        "roles",
        ":roleCode"
       ],
       "variable": [
        {
         "key": "username",
         "value": ""
        },
        {
         "key": "roleCode",
         "value": ""
        }
       ]
      },
      "description": "Removes a single role from the user's roles."
     }
    }
   ]
  },
  {
   "name": "User Groups",
   "item": [
    {
     "name": "List user groups",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/userGroups",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "userGroups"
       ],
       "query": [
        {
         "key": "name",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of Keycloak realm groups, optionally filtered by name."
     }
    },
    {
     "name": "Create a user group",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/userGroups",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "userGroups"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"billing-team\",\n  \"description\": \"string\",\n  \"childGroups\": [\n    \"string\"\n  ],\n  \"memberCount\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new Keycloak realm group. Returns 409 when a group with the same name already exists; use POST /{group} for create-or-update. Returns 201."
     }
    },
    {
     "name": "Get a user group by code",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/userGroups/:group",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "userGroups",
        ":group"
       ],
       "variable": [
        {
         "key": "group",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single group by name, including its child groups and member count."
     }
    },
    {
     "name": "Create or update a user group (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/userGroups/:group",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "userGroups",
        ":group"
       ],
       "variable": [
        {
         "key": "group",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"billing-team\",\n  \"description\": \"string\",\n  \"childGroups\": [\n    \"string\"\n  ],\n  \"memberCount\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the group name in the path. Returns 201 when it creates a new group and 200 when it updates an existing one."
     }
    },
    {
     "name": "Update a user group",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/userGroups/:group",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "userGroups",
        ":group"
       ],
       "variable": [
        {
         "key": "group",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"billing-team\",\n  \"description\": \"string\",\n  \"childGroups\": [\n    \"string\"\n  ],\n  \"memberCount\": 0\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing group's description. Partial-update semantics: a null field keeps the stored value."
     }
    },
    {
     "name": "Delete a user group",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/userGroups/:group",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "userGroups",
        ":group"
       ],
       "variable": [
        {
         "key": "group",
         "value": ""
        }
       ]
      },
      "description": "Removes the group identified by the code."
     }
    },
    {
     "name": "List a group's members",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/userGroups/:group/members",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "userGroups",
        ":group",
        "members"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "group",
         "value": ""
        }
       ]
      },
      "description": "Returns a paginated list of usernames who are direct members of the group."
     }
    },
    {
     "name": "Add a user to a group",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/userGroups/:group/members/:username",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "userGroups",
        ":group",
        "members",
        ":username"
       ],
       "variable": [
        {
         "key": "group",
         "value": ""
        },
        {
         "key": "username",
         "value": ""
        }
       ]
      },
      "description": "Adds the named user to the group (Keycloak join). Idempotent when the user is already a member."
     }
    },
    {
     "name": "Remove a user from a group",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/userGroups/:group/members/:username",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "userGroups",
        ":group",
        "members",
        ":username"
       ],
       "variable": [
        {
         "key": "group",
         "value": ""
        },
        {
         "key": "username",
         "value": ""
        }
       ]
      },
      "description": "Removes the named user from the group (Keycloak leave)."
     }
    }
   ]
  },
  {
   "name": "Workbench",
   "item": [
    {
     "name": "Run a synchronous read-only HQL query (Query Studio Deep mode)",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/workbench/expert/deep",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workbench",
        "expert",
        "deep"
       ],
       "query": [
        {
         "key": "query",
         "value": "",
         "disabled": true
        },
        {
         "key": "alias",
         "value": "",
         "disabled": true
        },
        {
         "key": "fields",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "orderBy",
         "value": "",
         "disabled": true
        },
        {
         "key": "sortOrder",
         "value": "",
         "disabled": true
        },
        {
         "key": "groupBy",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Runs a synchronous, read-only HQL query built from the query parameters and returns the result inline. Role-gated. Replaces the legacy temporary /api/rest/query endpoint."
     }
    },
    {
     "name": "Submit an async Expert Query for execution",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/workbench/expert/execute",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workbench",
        "expert",
        "execute"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"query\": \"SELECT code FROM Seller\",\n  \"limit\": 1000,\n  \"format\": \"CSV\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Validates a single read-only statement and submits it as an async job, returning 202 with the execution result id to poll. Role-gated and audited; returns 403 without the required role and 429 when the concurrency limit is reached."
     }
    },
    {
     "name": "List the JPA entities available to Query Studio",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/workbench/schema/entities",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workbench",
        "schema",
        "entities"
       ]
      },
      "description": "Returns the catalog of JPA entities the Query Studio can address, for the EntityPicker."
     }
    },
    {
     "name": "Get fields + DB mapping for one entity",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/workbench/schema/entities/:entity",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workbench",
        "schema",
        "entities",
        ":entity"
       ],
       "variable": [
        {
         "key": "entity",
         "value": ""
        }
       ]
      },
      "description": "Returns the queryable fields and database column mapping for one entity, for the FieldPicker and autocomplete."
     }
    }
   ]
  },
  {
   "name": "Workflows",
   "item": [
    {
     "name": "List workflows",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/workflows",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workflows"
       ],
       "query": [
        {
         "key": "baseEntityName",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns workflow definitions, optionally filtered to those bound to a given base entity type."
     }
    },
    {
     "name": "Create a workflow",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/workflows",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workflows"
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"updatedCode\": \"string\",\n  \"disabled\": true,\n  \"targetEntityClass\": \"string\",\n  \"targetCetCode\": \"string\",\n  \"filter\": {\n    \"id\": 0,\n    \"code\": \"string\",\n    \"description\": \"string\",\n    \"updatedCode\": \"string\",\n    \"disabled\": true,\n    \"shared\": true,\n    \"inputXml\": \"string\",\n    \"pollingQuery\": \"string\",\n    \"entityClass\": \"string\",\n    \"customFields\": {\n      \"customField\": [\n        {\n          \"code\": null,\n          \"description\": null,\n          \"fieldType\": null,\n          \"languageDescriptions\": null,\n          \"valueDate\": null,\n          \"valuePeriodStartDate\": null,\n          \"valuePeriodEndDate\": null,\n          \"valuePeriodPriority\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"mapValue\": null,\n          \"entityReferenceValue\": null,\n          \"valueConverted\": null,\n          \"indexType\": null,\n          \"fileValue\": null,\n          \"formattedValue\": null,\n          \"urlReferenceValue\": null,\n          \"guiPosition\": null,\n          \"customTableCode\": null,\n          \"dataFilter\": null,\n          \"fields\": null,\n          \"applicableOnEl\": null,\n          \"applicableOnElExpression\": null,\n          \"value\": null\n        }\n      ],\n      \"inheritedCustomField\": [\n        {\n          \"code\": null,\n          \"description\": null,\n          \"fieldType\": null,\n          \"languageDescriptions\": null,\n          \"valueDate\": null,\n          \"valuePeriodStartDate\": null,\n          \"valuePeriodEndDate\": null,\n          \"valuePeriodPriority\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"mapValue\": null,\n          \"entityReferenceValue\": null,\n          \"valueConverted\": null,\n          \"indexType\": null,\n          \"fileValue\": null,\n          \"formattedValue\": null,\n          \"urlReferenceValue\": null,\n          \"guiPosition\": null,\n          \"customTableCode\": null,\n          \"dataFilter\": null,\n          \"fields\": null,\n          \"applicableOnEl\": null,\n          \"applicableOnElExpression\": null,\n          \"value\": null\n        }\n      ]\n    }\n  },\n  \"initStatus\": \"string\",\n  \"statuses\": [\n    {\n      \"id\": 0,\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"updatedCode\": \"string\",\n      \"uuid\": \"string\"\n    }\n  ],\n  \"transitions\": [\n    {\n      \"id\": 0,\n      \"uuid\": \"string\",\n      \"fromStatus\": \"string\",\n      \"toStatus\": \"string\",\n      \"conditionEl\": \"string\",\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"actionScriptCode\": \"string\",\n      \"actions\": [\n        {\n          \"id\": null,\n          \"description\": null,\n          \"uuid\": null,\n          \"priority\": null,\n          \"type\": null,\n          \"conditionEl\": null,\n          \"asynchronous\": null,\n          \"actionScriptCode\": null,\n          \"notificationCode\": null,\n          \"valueEl\": null,\n          \"logLevel\": null,\n          \"field\": null,\n          \"parameters\": null\n        }\n      ]\n    }\n  ],\n  \"enableHistory\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Creates a new workflow definition. Fails if one already exists with the same code; use POST /{code} for create-or-update. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Get one workflow",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/workflows/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workflows",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single workflow definition, including its statuses, transitions, and actions."
     }
    },
    {
     "name": "Create or update a workflow (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/workflows/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workflows",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"updatedCode\": \"string\",\n  \"disabled\": true,\n  \"targetEntityClass\": \"string\",\n  \"targetCetCode\": \"string\",\n  \"filter\": {\n    \"id\": 0,\n    \"code\": \"string\",\n    \"description\": \"string\",\n    \"updatedCode\": \"string\",\n    \"disabled\": true,\n    \"shared\": true,\n    \"inputXml\": \"string\",\n    \"pollingQuery\": \"string\",\n    \"entityClass\": \"string\",\n    \"customFields\": {\n      \"customField\": [\n        {\n          \"code\": null,\n          \"description\": null,\n          \"fieldType\": null,\n          \"languageDescriptions\": null,\n          \"valueDate\": null,\n          \"valuePeriodStartDate\": null,\n          \"valuePeriodEndDate\": null,\n          \"valuePeriodPriority\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"mapValue\": null,\n          \"entityReferenceValue\": null,\n          \"valueConverted\": null,\n          \"indexType\": null,\n          \"fileValue\": null,\n          \"formattedValue\": null,\n          \"urlReferenceValue\": null,\n          \"guiPosition\": null,\n          \"customTableCode\": null,\n          \"dataFilter\": null,\n          \"fields\": null,\n          \"applicableOnEl\": null,\n          \"applicableOnElExpression\": null,\n          \"value\": null\n        }\n      ],\n      \"inheritedCustomField\": [\n        {\n          \"code\": null,\n          \"description\": null,\n          \"fieldType\": null,\n          \"languageDescriptions\": null,\n          \"valueDate\": null,\n          \"valuePeriodStartDate\": null,\n          \"valuePeriodEndDate\": null,\n          \"valuePeriodPriority\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"mapValue\": null,\n          \"entityReferenceValue\": null,\n          \"valueConverted\": null,\n          \"indexType\": null,\n          \"fileValue\": null,\n          \"formattedValue\": null,\n          \"urlReferenceValue\": null,\n          \"guiPosition\": null,\n          \"customTableCode\": null,\n          \"dataFilter\": null,\n          \"fields\": null,\n          \"applicableOnEl\": null,\n          \"applicableOnElExpression\": null,\n          \"value\": null\n        }\n      ]\n    }\n  },\n  \"initStatus\": \"string\",\n  \"statuses\": [\n    {\n      \"id\": 0,\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"updatedCode\": \"string\",\n      \"uuid\": \"string\"\n    }\n  ],\n  \"transitions\": [\n    {\n      \"id\": 0,\n      \"uuid\": \"string\",\n      \"fromStatus\": \"string\",\n      \"toStatus\": \"string\",\n      \"conditionEl\": \"string\",\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"actionScriptCode\": \"string\",\n      \"actions\": [\n        {\n          \"id\": null,\n          \"description\": null,\n          \"uuid\": null,\n          \"priority\": null,\n          \"type\": null,\n          \"conditionEl\": null,\n          \"asynchronous\": null,\n          \"actionScriptCode\": null,\n          \"notificationCode\": null,\n          \"valueEl\": null,\n          \"logLevel\": null,\n          \"field\": null,\n          \"parameters\": null\n        }\n      ]\n    }\n  ],\n  \"enableHistory\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the workflow code in the path. Creates the definition if absent, otherwise updates it. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Update a workflow",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/workflows/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workflows",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"updatedCode\": \"string\",\n  \"disabled\": true,\n  \"targetEntityClass\": \"string\",\n  \"targetCetCode\": \"string\",\n  \"filter\": {\n    \"id\": 0,\n    \"code\": \"string\",\n    \"description\": \"string\",\n    \"updatedCode\": \"string\",\n    \"disabled\": true,\n    \"shared\": true,\n    \"inputXml\": \"string\",\n    \"pollingQuery\": \"string\",\n    \"entityClass\": \"string\",\n    \"customFields\": {\n      \"customField\": [\n        {\n          \"code\": null,\n          \"description\": null,\n          \"fieldType\": null,\n          \"languageDescriptions\": null,\n          \"valueDate\": null,\n          \"valuePeriodStartDate\": null,\n          \"valuePeriodEndDate\": null,\n          \"valuePeriodPriority\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"mapValue\": null,\n          \"entityReferenceValue\": null,\n          \"valueConverted\": null,\n          \"indexType\": null,\n          \"fileValue\": null,\n          \"formattedValue\": null,\n          \"urlReferenceValue\": null,\n          \"guiPosition\": null,\n          \"customTableCode\": null,\n          \"dataFilter\": null,\n          \"fields\": null,\n          \"applicableOnEl\": null,\n          \"applicableOnElExpression\": null,\n          \"value\": null\n        }\n      ],\n      \"inheritedCustomField\": [\n        {\n          \"code\": null,\n          \"description\": null,\n          \"fieldType\": null,\n          \"languageDescriptions\": null,\n          \"valueDate\": null,\n          \"valuePeriodStartDate\": null,\n          \"valuePeriodEndDate\": null,\n          \"valuePeriodPriority\": null,\n          \"stringValue\": null,\n          \"dateValue\": null,\n          \"longValue\": null,\n          \"doubleValue\": null,\n          \"booleanValue\": null,\n          \"mapValue\": null,\n          \"entityReferenceValue\": null,\n          \"valueConverted\": null,\n          \"indexType\": null,\n          \"fileValue\": null,\n          \"formattedValue\": null,\n          \"urlReferenceValue\": null,\n          \"guiPosition\": null,\n          \"customTableCode\": null,\n          \"dataFilter\": null,\n          \"fields\": null,\n          \"applicableOnEl\": null,\n          \"applicableOnElExpression\": null,\n          \"value\": null\n        }\n      ]\n    }\n  },\n  \"initStatus\": \"string\",\n  \"statuses\": [\n    {\n      \"id\": 0,\n      \"code\": \"string\",\n      \"description\": \"string\",\n      \"updatedCode\": \"string\",\n      \"uuid\": \"string\"\n    }\n  ],\n  \"transitions\": [\n    {\n      \"id\": 0,\n      \"uuid\": \"string\",\n      \"fromStatus\": \"string\",\n      \"toStatus\": \"string\",\n      \"conditionEl\": \"string\",\n      \"priority\": 0,\n      \"description\": \"string\",\n      \"actionScriptCode\": \"string\",\n      \"actions\": [\n        {\n          \"id\": null,\n          \"description\": null,\n          \"uuid\": null,\n          \"priority\": null,\n          \"type\": null,\n          \"conditionEl\": null,\n          \"asynchronous\": null,\n          \"actionScriptCode\": null,\n          \"notificationCode\": null,\n          \"valueEl\": null,\n          \"logLevel\": null,\n          \"field\": null,\n          \"parameters\": null\n        }\n      ]\n    }\n  ],\n  \"enableHistory\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing workflow definition. Partial-update semantics apply. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Delete a workflow",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/workflows/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workflows",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the workflow definition identified by the code."
     }
    },
    {
     "name": "Execute a workflow against an entity instance",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/workflows/:code/executions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workflows",
        ":code",
        "executions"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"baseEntityName\": \"Subscription\",\n  \"entityInstanceCode\": \"SUB_001\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Runs the workflow against the entity instance named in the body, advancing it through the applicable transitions. Returns 202 Accepted with an execution envelope. Modeled as a noun-form execution sub-resource."
     }
    },
    {
     "name": "Get workflow execution history",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/workflows/:code/history",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "workflows",
        ":code",
        "history"
       ],
       "query": [
        {
         "key": "entityInstanceCode",
         "value": "",
         "disabled": true
        },
        {
         "key": "fromStatus",
         "value": "",
         "disabled": true
        },
        {
         "key": "toStatus",
         "value": "",
         "disabled": true
        }
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns the recorded transitions for the workflow, optionally narrowed by entity instance and by from/to status."
     }
    }
   ]
  },
  {
   "name": "Custom Endpoints",
   "item": [
    {
     "name": "List custom endpoints",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customEndpoints",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customEndpoints"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "disabled": true
        }
       ]
      },
      "description": "Returns a paginated list of custom endpoint definitions."
     }
    },
    {
     "name": "Get one custom endpoint",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customEndpoints/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customEndpoints",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Fetches a single custom endpoint definition by its code."
     }
    },
    {
     "name": "Create or update a custom endpoint (upsert)",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customEndpoints/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customEndpoints",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"updatedCode\": \"string\",\n  \"secured\": true,\n  \"serviceCode\": \"string\",\n  \"synchronous\": true,\n  \"method\": \"PATCH\",\n  \"pathParameters\": [\n    \"string\"\n  ],\n  \"roles\": [\n    \"string\"\n  ],\n  \"jsonataTransformer\": \"string\",\n  \"returnedVariableName\": \"string\",\n  \"returnedValueExample\": \"string\",\n  \"serializeResult\": true,\n  \"contentType\": \"string\",\n  \"basePath\": \"string\",\n  \"path\": \"string\",\n  \"parameterMappings\": [\n    {\n      \"scriptParameter\": \"string\",\n      \"multivalued\": true,\n      \"parameterName\": \"string\",\n      \"defaultValue\": \"string\",\n      \"valueRequired\": true,\n      \"description\": \"string\",\n      \"example\": \"string\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Idempotent upsert keyed on the endpoint code in the path. Creates the endpoint if absent, otherwise updates it. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Update a custom endpoint",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/api/v1/customEndpoints/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customEndpoints",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "body": {
       "mode": "raw",
       "raw": "{\n  \"id\": 0,\n  \"code\": \"string\",\n  \"description\": \"string\",\n  \"updatedCode\": \"string\",\n  \"secured\": true,\n  \"serviceCode\": \"string\",\n  \"synchronous\": true,\n  \"method\": \"PATCH\",\n  \"pathParameters\": [\n    \"string\"\n  ],\n  \"roles\": [\n    \"string\"\n  ],\n  \"jsonataTransformer\": \"string\",\n  \"returnedVariableName\": \"string\",\n  \"returnedValueExample\": \"string\",\n  \"serializeResult\": true,\n  \"contentType\": \"string\",\n  \"basePath\": \"string\",\n  \"path\": \"string\",\n  \"parameterMappings\": [\n    {\n      \"scriptParameter\": \"string\",\n      \"multivalued\": true,\n      \"parameterName\": \"string\",\n      \"defaultValue\": \"string\",\n      \"valueRequired\": true,\n      \"description\": \"string\",\n      \"example\": \"string\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      },
      "description": "Updates an existing custom endpoint. Partial-update semantics: a null field keeps the stored value. Returns 200 with a status envelope."
     }
    },
    {
     "name": "Delete a custom endpoint",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customEndpoints/:code",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customEndpoints",
        ":code"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Removes the custom endpoint definition identified by the code."
     }
    },
    {
     "name": "Get the OpenAPI document for a custom endpoint",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/api/v1/customEndpoints/:code/openapi",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "api",
        "v1",
        "customEndpoints",
        ":code",
        "openapi"
       ],
       "variable": [
        {
         "key": "code",
         "value": ""
        }
       ]
      },
      "description": "Returns the generated OpenAPI document describing the single custom endpoint, so its contract can be shared and imported independently."
     }
    }
   ]
  }
 ]
}