{
  "openapi": "3.1.0",
  "info": {
    "title": "Product",
    "version": "5407d210340c",
    "summary": "DgCore platform API surface for the Product domain.",
    "description": "The Product domain: 80 operations across 10 resource groups.\n\nThis is the published contract, not a description of a running deployment: the environment\nyou were granted may carry operations this document does not, and may not carry every\noperation listed here."
  },
  "servers": [
    {
      "url": "https://{gateway}/product-service",
      "description": "The full route is `https://<gateway>/product-service/<path>`. The service segment is fixed; the gateway host is the one you were granted. Substitute it below.",
      "variables": {
        "gateway": {
          "default": "gateway.example"
        }
      }
    }
  ],
  "tags": [
    {
      "name": "batch-catalog",
      "description": "Operations addressed under `/batch-catalog` — 1 operation.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    },
    {
      "name": "compensating-transactions",
      "description": "Operations addressed under `/compensating-transactions` — 2 operations.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    },
    {
      "name": "data-migrations",
      "description": "Operations addressed under `/data-migrations` — 1 operation.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    },
    {
      "name": "extended-properties",
      "description": "Operations addressed under `/extended-properties` — 1 operation.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    },
    {
      "name": "localizations",
      "description": "Operations addressed under `/localizations` — 10 operations.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    },
    {
      "name": "parameters",
      "description": "Operations addressed under `/parameters` — 21 operations.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    },
    {
      "name": "product-categories",
      "description": "Operations addressed under `/product-categories` — 3 operations.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    },
    {
      "name": "product-groups",
      "description": "Operations addressed under `/product-groups` — 4 operations.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    },
    {
      "name": "products",
      "description": "Operations addressed under `/products` — 36 operations.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    },
    {
      "name": "taxes",
      "description": "Operations addressed under `/taxes` — 1 operation.",
      "x-aura-documentation": {
        "language": "en",
        "status": "structural-fallback",
        "source": "catalog-structure"
      }
    }
  ],
  "paths": {
    "/batch-catalog": {
      "post": {
        "operationId": "product-batch-catalog",
        "tags": [
          "batch-catalog"
        ],
        "summary": "product-batch-catalog",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "sequenceNumber": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "sequenceNumber"
                  },
                  "serviceCode": {
                    "type": "string",
                    "x-aura-field-code": "serviceCode"
                  },
                  "variables": {
                    "type": "object",
                    "x-aura-field-code": "variables"
                  }
                },
                "required": [
                  "sequenceNumber",
                  "serviceCode",
                  "variables"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 3,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-batch-catalog",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "batch-catalog",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "declared-non-dto",
          "note": "The route declares `IEnumerable<object>`. `object` is the C# base type, so the code states that a body is returned and declines to say what is in it — the shape is chosen at runtime, and the body is a JSON array whose elements need not share a shape. That is the declaration, not a failure to read it, and nothing here narrows it.",
          "declared_type": "IEnumerable<object>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "object"
        }
      }
    },
    "/compensating-transactions/commit": {
      "post": {
        "operationId": "product-commit-compensating-transaction",
        "tags": [
          "compensating-transactions"
        ],
        "summary": "product-commit-compensating-transaction",
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-commit-compensating-transaction",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "compensating-transactions/commit",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        }
      }
    },
    "/compensating-transactions/rollback": {
      "post": {
        "operationId": "product-rollback-compensating-transaction",
        "tags": [
          "compensating-transactions"
        ],
        "summary": "product-rollback-compensating-transaction",
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-rollback-compensating-transaction",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "compensating-transactions/rollback",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        }
      }
    },
    "/data-migrations": {
      "get": {
        "operationId": "product-get-data-migration-list",
        "tags": [
          "data-migrations"
        ],
        "x-aura-documentation": {
          "language": "en",
          "status": "structural-fallback",
          "source": "catalog-structure"
        },
        "summary": "Returns data migration records",
        "description": "Invokes the `product-get-data-migration-list` service definition through `GET /data-migrations`.\n\nTurkish display name: Data migration listesini döner",
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-data-migration-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "data-migrations",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "List<DataMigrationDto>",
          "envelopes": [
            "List"
          ],
          "payload": "DataMigrationDto",
          "collection": true,
          "members": [
            {
              "name": "Id",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "BranchName",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "TableName",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "LastCommittedId",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "LastCommittedDate",
              "declared_type": "DateTime",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Script",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Parameters",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "HasError",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ErrorMessage",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "DatabaseName",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "CreatedDate",
              "declared_type": "DateTime",
              "nullable": false,
              "collection": false
            },
            {
              "name": "TransactionStatus",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        }
      }
    },
    "/extended-properties": {
      "get": {
        "operationId": "product-get-extended-property-list",
        "tags": [
          "extended-properties"
        ],
        "summary": "product-get-extended-property-list",
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "properties": {
                "code": {
                  "x-aura-type": "unresolved"
                },
                "expression": {
                  "type": "string",
                  "x-aura-field-code": "expression"
                },
                "parameters": {
                  "type": "object",
                  "properties": {
                    "comparer": {
                      "type": "object",
                      "x-aura-field-code": "comparer"
                    },
                    "count": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "count"
                    },
                    "item": {
                      "type": "object",
                      "x-aura-field-code": "item"
                    },
                    "keys": {
                      "x-aura-type": "unresolved"
                    },
                    "values": {
                      "x-aura-type": "unresolved"
                    }
                  },
                  "x-aura-field-code": "parameters"
                }
              },
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. Returns a collection of records. Of 135 operations in this state that were probed (measured against a reference deployment on parameterless GET routes only), 118 answered and 118 returned a bare JSON array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "Array of catalog-declared response records.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "entityId": {
                        "type": "string",
                        "x-aura-field-code": "entityId"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "id"
                      },
                      "isActive": {
                        "type": "boolean",
                        "x-aura-field-code": "isActive"
                      },
                      "isParametric": {
                        "type": "boolean",
                        "x-aura-field-code": "isParametric"
                      },
                      "name": {
                        "type": "string",
                        "x-aura-field-code": "name",
                        "x-aura-maskable": true
                      },
                      "parameterCode": {
                        "type": "string",
                        "x-aura-field-code": "parameterCode"
                      },
                      "parameterKey": {
                        "type": "string",
                        "x-aura-field-code": "parameterKey"
                      }
                    }
                  },
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-extended-property-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "extended-properties",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<ExtendedPropertyDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "ExtendedPropertyDto",
          "collection": true,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "EntityId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsParametric",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParameterCode",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParameterKey",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        }
      }
    },
    "/localizations": {
      "get": {
        "operationId": "product-get-localization-list",
        "tags": [
          "localizations"
        ],
        "summary": "product-get-localization-list",
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a collection.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-localization-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<LocalizationDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "LocalizationDto",
          "collection": true,
          "members": [
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Type",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Context",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Translations",
              "declared_type": "IEnumerable<LocalizationTranslationDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a collection.",
          "code_response_state": "structure",
          "code_cardinality": "collection",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        }
      },
      "post": {
        "operationId": "product-create-localization",
        "tags": [
          "localizations"
        ],
        "summary": "product-create-localization",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "x-aura-field-code": "localizationCode"
                  },
                  "translations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "context": {
                          "type": "string",
                          "x-aura-field-code": "context"
                        },
                        "languageCode": {
                          "type": "string",
                          "x-aura-field-code": "languageCode"
                        }
                      },
                      "required": [
                        "context",
                        "languageCode"
                      ],
                      "x-aura-field-code": "translations"
                    }
                  },
                  "type": {
                    "type": "string",
                    "x-aura-field-code": "localizationType"
                  }
                },
                "required": [
                  "code",
                  "translations",
                  "type"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 3,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-create-localization",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "AuraCommandDto",
          "payload": "AuraCommandDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LCLZ_1",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            }
          ]
        }
      }
    },
    "/localizations/by-code/{code}": {
      "get": {
        "operationId": "product-get-localization-id-by-code",
        "tags": [
          "localizations"
        ],
        "summary": "product-get-localization-id-by-code",
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "x-aura-field-code": "code"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-localization-id-by-code",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations/by-code/{code}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "LocalizationDto",
          "payload": "LocalizationDto",
          "collection": false,
          "members": [
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Type",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Context",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Translations",
              "declared_type": "IEnumerable<LocalizationTranslationDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LCLZ_3",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            }
          ]
        }
      }
    },
    "/localizations/{id}": {
      "delete": {
        "operationId": "product-delete-localization",
        "tags": [
          "localizations"
        ],
        "summary": "product-delete-localization",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-delete-localization",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations/{id}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LCLZ_3",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            }
          ]
        }
      },
      "get": {
        "operationId": "product-get-localization-by-id",
        "tags": [
          "localizations"
        ],
        "summary": "product-get-localization-by-id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-localization-by-id",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations/{id}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "LocalizationDto",
          "payload": "LocalizationDto",
          "collection": false,
          "members": [
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Type",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Context",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Translations",
              "declared_type": "IEnumerable<LocalizationTranslationDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LCLZ_3",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            }
          ]
        }
      },
      "put": {
        "operationId": "product-update-localization",
        "tags": [
          "localizations"
        ],
        "summary": "product-update-localization",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "localizationId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "type": {
                    "type": "string",
                    "x-aura-field-code": "localizationType"
                  }
                },
                "required": [
                  "type"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-update-localization",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations/{id}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LCLZ_3",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            }
          ]
        }
      }
    },
    "/localizations/{id}/translations": {
      "get": {
        "operationId": "product-get-localization-translation-by-localization-id",
        "tags": [
          "localizations"
        ],
        "summary": "product-get-localization-translation-by-localization-id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a collection.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-localization-translation-by-localization-id",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations/{id}/translations",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<LocalizationTranslationDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "LocalizationTranslationDto",
          "collection": true,
          "members": [
            {
              "name": "TranslationId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "LanguageCode",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Context",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a collection.",
          "code_response_state": "structure",
          "code_cardinality": "collection",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LCLZ_3",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            }
          ]
        }
      },
      "post": {
        "operationId": "product-create-localization-translation",
        "tags": [
          "localizations"
        ],
        "summary": "product-create-localization-translation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "translations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "context": {
                          "type": "string",
                          "x-aura-field-code": "context"
                        },
                        "languageCode": {
                          "type": "string",
                          "x-aura-field-code": "languageCode"
                        }
                      },
                      "required": [
                        "context",
                        "languageCode"
                      ],
                      "x-aura-field-code": "translations"
                    }
                  }
                },
                "required": [
                  "translations"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-create-localization-translation",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations/{id}/translations",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LCLZ_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            },
            {
              "code": "ERR_LCLZ_3",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            }
          ]
        }
      }
    },
    "/localizations/{id}/translations/{translationId}": {
      "delete": {
        "operationId": "product-delete-localization-translation",
        "tags": [
          "localizations"
        ],
        "summary": "product-delete-localization-translation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "translationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "translationId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-delete-localization-translation",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations/{id}/translations/{translationId}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LCLZ_3",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            },
            {
              "code": "ERR_LCLZ_4",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            }
          ]
        }
      },
      "put": {
        "operationId": "product-update-localization-translation",
        "tags": [
          "localizations"
        ],
        "summary": "product-update-localization-translation",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "translationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "translationId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "context": {
                    "type": "string",
                    "x-aura-field-code": "context"
                  }
                },
                "required": [
                  "context"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-update-localization-translation",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "localizations/{id}/translations/{translationId}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LCLZ_3",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            },
            {
              "code": "ERR_LCLZ_4",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": null
            }
          ]
        }
      }
    },
    "/parameters": {
      "get": {
        "operationId": "product-get-parameter-list",
        "tags": [
          "parameters"
        ],
        "summary": "product-get-parameter-list",
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a collection.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-parameter-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<ParameterDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "ParameterDto",
          "collection": true,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Translations",
              "declared_type": "IEnumerable<ParameterTranslationDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "ParameterFields",
              "declared_type": "IEnumerable<ParameterFieldDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a collection.",
          "code_response_state": "structure",
          "code_cardinality": "collection",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        }
      },
      "post": {
        "operationId": "product-create-parameter",
        "tags": [
          "parameters"
        ],
        "summary": "product-create-parameter",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "x-aura-field-code": "parameterCode"
                  },
                  "isActive": {
                    "type": "boolean",
                    "x-aura-field-code": "isActive"
                  },
                  "translations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "languageCode": {
                          "type": "string",
                          "x-aura-field-code": "languageCode"
                        },
                        "name": {
                          "type": "string",
                          "x-aura-field-code": "parameterName"
                        }
                      },
                      "required": [
                        "languageCode",
                        "name"
                      ],
                      "x-aura-field-code": "translations"
                    }
                  }
                },
                "required": [
                  "code",
                  "translations"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 3,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-create-parameter",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "AuraCommandDto",
          "payload": "AuraCommandDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_1",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_CODE_ALREADY_EXISTS"
            }
          ]
        }
      }
    },
    "/parameters/by-code/{code}": {
      "get": {
        "operationId": "product-get-parameter-by-code",
        "tags": [
          "parameters"
        ],
        "summary": "product-get-parameter-by-code",
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "x-aura-field-code": "code"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "x-aura-field-code": "includeInactive"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 1
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-parameter-by-code",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/by-code/{code}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "ParameterDto",
          "payload": "ParameterDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Translations",
              "declared_type": "IEnumerable<ParameterTranslationDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "ParameterFields",
              "declared_type": "IEnumerable<ParameterFieldDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_12",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_CODE_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/parameters/by-code/{code}/default-value": {
      "get": {
        "operationId": "product-get-parameter-default-value-by-parameter-code",
        "tags": [
          "parameters"
        ],
        "summary": "product-get-parameter-default-value-by-parameter-code",
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "x-aura-field-code": "code"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "x-aura-field-code": "includeInactive"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 1
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-parameter-default-value-by-parameter-code",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/by-code/{code}/default-value",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "declared-non-dto",
          "note": "The route returns `string`, a scalar rather than an object. There is no field tree below because there are no fields: the body is a JSON string. This is a complete answer read from the declaration, not a gap.",
          "declared_type": "string",
          "payload": "string"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_12",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_CODE_NOT_FOUND"
            },
            {
              "code": "ERR_PRMTR_14",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_DEFAULT_VALUE_BY_CODE_NOT_EXISTS"
            }
          ]
        }
      }
    },
    "/parameters/by-code/{code}/values": {
      "get": {
        "operationId": "product-get-parameter-value-list-by-parameter-code",
        "tags": [
          "parameters"
        ],
        "summary": "product-get-parameter-value-list-by-parameter-code",
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "x-aura-field-code": "code"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "x-aura-field-code": "includeInactive"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 1
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a collection.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-parameter-value-list-by-parameter-code",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/by-code/{code}/values",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<ParameterValueDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "ParameterValueDto",
          "collection": true,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParamKey",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Context",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "SortOrder",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "Translations",
              "declared_type": "IEnumerable<ParameterValueTranslationDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a collection.",
          "code_response_state": "structure",
          "code_cardinality": "collection",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_12",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_CODE_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/parameters/{id}": {
      "delete": {
        "operationId": "product-delete-parameter",
        "tags": [
          "parameters"
        ],
        "summary": "product-delete-parameter",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-delete-parameter",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            }
          ]
        }
      },
      "get": {
        "operationId": "product-get-parameter-by-id",
        "tags": [
          "parameters"
        ],
        "summary": "product-get-parameter-by-id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "x-aura-field-code": "includeInactive"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 1
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-parameter-by-id",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "ParameterDto",
          "payload": "ParameterDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Translations",
              "declared_type": "IEnumerable<ParameterTranslationDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "ParameterFields",
              "declared_type": "IEnumerable<ParameterFieldDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            }
          ]
        }
      },
      "put": {
        "operationId": "product-update-parameter",
        "tags": [
          "parameters"
        ],
        "summary": "product-update-parameter",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "isActive": {
                    "type": "boolean",
                    "x-aura-field-code": "isActive"
                  },
                  "translations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "languageCode": {
                          "type": "string",
                          "x-aura-field-code": "languageCode"
                        },
                        "name": {
                          "type": "string",
                          "x-aura-field-code": "parameterName"
                        }
                      },
                      "required": [
                        "languageCode",
                        "name"
                      ],
                      "x-aura-field-code": "translations"
                    }
                  }
                },
                "required": [
                  "isActive",
                  "translations"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 2,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-update-parameter",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/parameters/{id}/default-value": {
      "get": {
        "operationId": "product-get-parameter-default-value",
        "tags": [
          "parameters"
        ],
        "summary": "product-get-parameter-default-value",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "x-aura-field-code": "includeInactive"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 1
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-parameter-default-value",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/default-value",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "declared-non-dto",
          "note": "The route returns `string`, a scalar rather than an object. There is no field tree below because there are no fields: the body is a JSON string. This is a complete answer read from the declaration, not a gap.",
          "declared_type": "string",
          "payload": "string"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_13",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_DEFAULT_VALUE_BY_ID_NOT_EXISTS"
            },
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/parameters/{id}/field-values/{fieldValueId}": {
      "delete": {
        "operationId": "product-delete-parameter-field-value",
        "tags": [
          "parameters"
        ],
        "summary": "product-delete-parameter-field-value",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "fieldValueId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "fieldValueId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-delete-parameter-field-value",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/field-values/{fieldValueId}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_10",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_FIELD_VALUE_NOT_EXISTS"
            },
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            }
          ]
        }
      },
      "put": {
        "operationId": "product-update-parameter-field-value",
        "tags": [
          "parameters"
        ],
        "summary": "product-update-parameter-field-value",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "fieldValueId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "fieldValueId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "fieldValue": {
                    "type": "string",
                    "x-aura-field-code": "fieldValue"
                  }
                },
                "required": [
                  "fieldValue"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-update-parameter-field-value",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/field-values/{fieldValueId}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_10",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_FIELD_VALUE_NOT_EXISTS"
            },
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/parameters/{id}/fields": {
      "get": {
        "operationId": "product-get-parameter-field-list",
        "tags": [
          "parameters"
        ],
        "summary": "product-get-parameter-field-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "x-aura-field-code": "includeInactive"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 1
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a collection.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-parameter-field-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/fields",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<ParameterFieldDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "ParameterFieldDto",
          "collection": true,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "Translations",
              "declared_type": "IEnumerable<ParameterFieldTranslationDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a collection.",
          "code_response_state": "structure",
          "code_cardinality": "collection",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "product-create-parameter-field",
        "tags": [
          "parameters"
        ],
        "summary": "product-create-parameter-field",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "x-aura-field-code": "code"
                  },
                  "translations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "languageCode": {
                          "type": "string",
                          "x-aura-field-code": "languageCode"
                        },
                        "name": {
                          "type": "string",
                          "x-aura-field-code": "name",
                          "x-aura-maskable": true
                        }
                      },
                      "required": [
                        "languageCode",
                        "name"
                      ],
                      "x-aura-field-code": "translations"
                    }
                  }
                },
                "required": [
                  "code",
                  "translations"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 2,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-create-parameter-field",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/fields",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "AuraCommandDto",
          "payload": "AuraCommandDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            },
            {
              "code": "ERR_PRMTR_3",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_FIELD_CODE_ALREADY_EXISTS"
            }
          ]
        }
      }
    },
    "/parameters/{id}/fields/{fieldId}": {
      "delete": {
        "operationId": "product-delete-parameter-field",
        "tags": [
          "parameters"
        ],
        "summary": "product-delete-parameter-field",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "fieldId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-delete-parameter-field",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/fields/{fieldId}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            },
            {
              "code": "ERR_PRMTR_5",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_FIELD_NOT_EXISTS"
            }
          ]
        }
      },
      "put": {
        "operationId": "product-update-parameter-field",
        "tags": [
          "parameters"
        ],
        "summary": "product-update-parameter-field",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "fieldId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "translations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "languageCode": {
                          "type": "string",
                          "x-aura-field-code": "languageCode"
                        },
                        "name": {
                          "type": "string",
                          "x-aura-field-code": "name",
                          "x-aura-maskable": true
                        }
                      },
                      "required": [
                        "languageCode",
                        "name"
                      ],
                      "x-aura-field-code": "translations"
                    }
                  }
                },
                "required": [
                  "translations"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-update-parameter-field",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/fields/{fieldId}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            },
            {
              "code": "ERR_PRMTR_5",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_FIELD_NOT_EXISTS"
            }
          ]
        }
      }
    },
    "/parameters/{id}/values": {
      "get": {
        "operationId": "product-get-parameter-value-list",
        "tags": [
          "parameters"
        ],
        "summary": "product-get-parameter-value-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "x-aura-field-code": "includeInactive"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 1
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a collection.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-parameter-value-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/values",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<ParameterValueDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "ParameterValueDto",
          "collection": true,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParamKey",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Context",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "SortOrder",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "Translations",
              "declared_type": "IEnumerable<ParameterValueTranslationDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a collection.",
          "code_response_state": "structure",
          "code_cardinality": "collection",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "product-create-parameter-value",
        "tags": [
          "parameters"
        ],
        "summary": "product-create-parameter-value",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "context": {
                    "type": "string",
                    "x-aura-field-code": "context"
                  },
                  "isActive": {
                    "type": "boolean",
                    "x-aura-field-code": "isActive"
                  },
                  "paramKey": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "paramKey"
                  },
                  "sortOrder": {
                    "type": "number",
                    "x-aura-field-code": "sortOrder"
                  },
                  "translations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "context": {
                          "type": "string",
                          "x-aura-field-code": "context"
                        },
                        "languageCode": {
                          "type": "string",
                          "x-aura-field-code": "languageCode"
                        }
                      },
                      "required": [
                        "context",
                        "languageCode"
                      ],
                      "x-aura-field-code": "translations"
                    }
                  }
                },
                "required": [
                  "context",
                  "paramKey",
                  "translations"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 5,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-create-parameter-value",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/values",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "AuraCommandDto",
          "payload": "AuraCommandDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            },
            {
              "code": "ERR_PRMTR_7",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_VALUE_WITH_KEY_ALREADY_EXISTS"
            }
          ]
        }
      }
    },
    "/parameters/{id}/values/{valueId}": {
      "delete": {
        "operationId": "product-delete-parameter-value",
        "tags": [
          "parameters"
        ],
        "summary": "product-delete-parameter-value",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "valueId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "valueId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-delete-parameter-value",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/values/{valueId}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            },
            {
              "code": "ERR_PRMTR_4",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_VALUE_NOT_EXISTS"
            }
          ]
        }
      },
      "put": {
        "operationId": "product-update-parameter-value",
        "tags": [
          "parameters"
        ],
        "summary": "product-update-parameter-value",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "valueId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "valueId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "context": {
                    "type": "string",
                    "x-aura-field-code": "context"
                  },
                  "isActive": {
                    "type": "boolean",
                    "x-aura-field-code": "isActive"
                  },
                  "sortOrder": {
                    "type": "number",
                    "x-aura-field-code": "sortOrder"
                  },
                  "translations": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "context": {
                          "type": "string",
                          "x-aura-field-code": "context"
                        },
                        "languageCode": {
                          "type": "string",
                          "x-aura-field-code": "languageCode"
                        }
                      },
                      "required": [
                        "context",
                        "languageCode"
                      ],
                      "x-aura-field-code": "translations"
                    }
                  }
                },
                "required": [
                  "context",
                  "isActive",
                  "sortOrder",
                  "translations"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 4,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-update-parameter-value",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/values/{valueId}",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            },
            {
              "code": "ERR_PRMTR_4",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_VALUE_NOT_EXISTS"
            }
          ]
        }
      }
    },
    "/parameters/{id}/values/{valueId}/field-values": {
      "get": {
        "operationId": "product-get-parameter-field-value-list",
        "tags": [
          "parameters"
        ],
        "summary": "product-get-parameter-field-value-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "valueId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "valueId"
            }
          },
          {
            "name": "includeInactive",
            "in": "query",
            "required": false,
            "schema": {
              "type": "boolean",
              "x-aura-field-code": "includeInactive"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 1
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a collection.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-get-parameter-field-value-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/values/{valueId}/field-values",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<ParameterFieldValueDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "ParameterFieldValueDto",
          "collection": true,
          "members": [
            {
              "name": "ParameterFieldValueId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParameterValueId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParameterFieldId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "FieldValue",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a collection.",
          "code_response_state": "structure",
          "code_cardinality": "collection",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "product-create-parameter-field-value",
        "tags": [
          "parameters"
        ],
        "summary": "product-create-parameter-field-value",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "valueId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "valueId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "fieldValues": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "fieldValue": {
                          "type": "string",
                          "x-aura-field-code": "fieldValue"
                        },
                        "isActive": {
                          "type": "boolean",
                          "x-aura-field-code": "isActive"
                        },
                        "parameterFieldId": {
                          "type": "string",
                          "format": "uuid",
                          "x-aura-field-code": "parameterFieldId"
                        }
                      },
                      "required": [
                        "fieldValue",
                        "isActive",
                        "parameterFieldId"
                      ],
                      "x-aura-field-code": "fieldValues"
                    }
                  }
                },
                "required": [
                  "fieldValues"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-create-parameter-field-value",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "parameters/{id}/values/{valueId}/field-values",
        "x-aura-request-contract": {
          "state": "not-parsed-in-repo"
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_PRMTR_2",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_ID_NOT_FOUND"
            },
            {
              "code": "ERR_PRMTR_4",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARAMETER_VALUE_NOT_EXISTS"
            }
          ]
        }
      }
    },
    "/product-categories": {
      "post": {
        "operationId": "create-product-category",
        "tags": [
          "product-categories"
        ],
        "summary": "create-product-category",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "alternativeInstallmentOption": {
                    "type": "string",
                    "x-aura-field-code": "alternativeInstallmentOption"
                  },
                  "code": {
                    "type": "string",
                    "x-aura-field-code": "productCategoryCode"
                  },
                  "description": {
                    "type": "string",
                    "x-aura-field-code": "productCategoryDescription"
                  },
                  "isActive": {
                    "type": "boolean",
                    "x-aura-field-code": "isActive"
                  },
                  "maxInstallmentNumber": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "maxInstallmentNumber"
                  },
                  "name": {
                    "type": "string",
                    "x-aura-field-code": "productCategoryName"
                  },
                  "parentProductCategoryId": {
                    "type": "string",
                    "format": "uuid",
                    "x-aura-field-code": "parentProductCategoryId"
                  }
                },
                "required": [
                  "alternativeInstallmentOption",
                  "code",
                  "description",
                  "isActive",
                  "maxInstallmentNumber",
                  "name"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 7,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-product-category",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "product-categories",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Name",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Code",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Description",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParentProductCategoryId",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "MaxInstallmentNumber",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "AlternativeInstallmentOption",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "AuraCommandDto",
          "payload": "AuraCommandDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_40",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PRODUCT_CATEGORY_FOUND_SAME_CODE"
            },
            {
              "code": "ERR_LPRDCT_41",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARENT_PRODUCT_CATEGORY_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_42",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARENT_PRODUCT_CATEGORY_IS_NOT_ACTIVE"
            }
          ]
        }
      }
    },
    "/product-categories/{id}": {
      "get": {
        "operationId": "get-product-category-by-id",
        "tags": [
          "product-categories"
        ],
        "summary": "get-product-category-by-id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "productCategoryId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-category-by-id",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "product-categories/{id}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "ProductCategoryDto",
          "payload": "ProductCategoryDto",
          "collection": false,
          "members": [
            {
              "name": "IsActive",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Description",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "MaxInstallmentNumber",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "AlternativeInstallmentOption",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParentProductCategoryId",
              "declared_type": "Guid?",
              "nullable": true,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_43",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PRODUCT_CATEGORY_NOT_FOUND"
            }
          ]
        }
      },
      "put": {
        "operationId": "update-product-category",
        "tags": [
          "product-categories"
        ],
        "summary": "update-product-category",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "productCategoryId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "alternativeInstallmentOption": {
                    "type": "string",
                    "x-aura-field-code": "alternativeInstallmentOption"
                  },
                  "code": {
                    "type": "string",
                    "x-aura-field-code": "productCategoryCode"
                  },
                  "description": {
                    "type": "string",
                    "x-aura-field-code": "productCategoryDescription"
                  },
                  "isActive": {
                    "type": "boolean",
                    "x-aura-field-code": "isActive"
                  },
                  "maxInstallmentNumber": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "maxInstallmentNumber"
                  },
                  "name": {
                    "type": "string",
                    "x-aura-field-code": "productCategoryName"
                  },
                  "parentProductCategoryId": {
                    "type": "string",
                    "format": "uuid",
                    "x-aura-field-code": "parentProductCategoryId"
                  }
                },
                "required": [
                  "alternativeInstallmentOption",
                  "code",
                  "description",
                  "isActive",
                  "maxInstallmentNumber",
                  "name"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 7,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "update-product-category",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "product-categories/{id}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Code",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Description",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParentProductCategoryId",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "MaxInstallmentNumber",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "AlternativeInstallmentOption",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_40",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PRODUCT_CATEGORY_FOUND_SAME_CODE"
            },
            {
              "code": "ERR_LPRDCT_41",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARENT_PRODUCT_CATEGORY_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_42",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PARENT_PRODUCT_CATEGORY_IS_NOT_ACTIVE"
            },
            {
              "code": "ERR_LPRDCT_43",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PRODUCT_CATEGORY_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/product-groups": {
      "get": {
        "operationId": "get-product-group-list",
        "tags": [
          "product-groups"
        ],
        "summary": "get-product-group-list",
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. Returns a collection of records. Of 135 operations in this state that were probed (measured against a reference deployment on parameterless GET routes only), 118 answered and 118 returned a bare JSON array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "Array of catalog-declared response records.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "code": {
                        "type": "string",
                        "x-aura-field-code": "code"
                      },
                      "description": {
                        "type": "string",
                        "x-aura-field-code": "loanProductGroupDescription"
                      },
                      "groupType": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "loanProductGroupType"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "loanProductGroupId"
                      },
                      "isActive": {
                        "type": "boolean",
                        "x-aura-field-code": "isActive"
                      },
                      "name": {
                        "type": "string",
                        "x-aura-field-code": "name",
                        "x-aura-maskable": true
                      },
                      "parentProductGroupId": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "parentProductGroupId"
                      }
                    }
                  },
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-group-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "product-groups",
        "x-aura-capabilities": {
          "caching": true,
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<LoanProductGroupDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "LoanProductGroupDto",
          "collection": true,
          "members": [
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Description",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParentProductGroupId",
              "declared_type": "Guid?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "GroupType",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        }
      },
      "post": {
        "operationId": "create-loan-product-group",
        "tags": [
          "product-groups"
        ],
        "summary": "create-loan-product-group",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "code": {
                    "type": "string",
                    "x-aura-field-code": "loanProductGroupCode"
                  },
                  "description": {
                    "type": "string",
                    "x-aura-field-code": "loanProductGroupDescription"
                  },
                  "groupType": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "loanProductGroupType",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "group_type",
                      "values": [
                        {
                          "value": 1,
                          "name": "Vehicle"
                        },
                        {
                          "value": 2,
                          "name": "Mortgage"
                        },
                        {
                          "value": 3,
                          "name": "Personel Finance"
                        },
                        {
                          "value": 4,
                          "name": "Other"
                        },
                        {
                          "value": 5,
                          "name": "Corporate Finance"
                        },
                        {
                          "value": 8,
                          "name": "Retail Loan",
                          "labels": {
                            "en": "Retail Loan",
                            "tr": "Bireysel Kredi"
                          }
                        }
                      ]
                    }
                  },
                  "name": {
                    "type": "string",
                    "x-aura-field-code": "loanProductGroupName"
                  },
                  "parentProductGroupId": {
                    "type": "string",
                    "format": "uuid",
                    "x-aura-field-code": "parentProductGroupId"
                  }
                },
                "required": [
                  "code",
                  "description",
                  "groupType",
                  "name"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 5,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares this returns a single record. Of 25 operations in this state with a probeable route, 8 answered and 6 returned a single record — the other two returned a collection and a bare boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "x-aura-field-code": "loanProductGroupId"
                    }
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-loan-product-group",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "product-groups",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Code",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "AuraCommandDto",
          "payload": "AuraCommandDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_1",
              "status": 400,
              "message": {
                "ar": "هناك تعريف بنفس رمز مجموعة المنتج: {0}",
                "en": "There is a definition with the same productGroupCode: {0}",
                "tr": "Aynı ürün grup kodu ile bir tanım var: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_GROUP_FOUND_SAME_CODE"
            }
          ]
        }
      }
    },
    "/product-groups/{id}": {
      "get": {
        "operationId": "get-product-group-by-id",
        "tags": [
          "product-groups"
        ],
        "summary": "get-product-group-by-id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductGroupId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-group-by-id",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "product-groups/{id}",
        "x-aura-capabilities": {
          "caching": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "LoanProductGroupDto",
          "payload": "LoanProductGroupDto",
          "collection": false,
          "members": [
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Description",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ParentProductGroupId",
              "declared_type": "Guid?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "GroupType",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_5",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على مجموعة المنتج. معرف مجموعة المنتج: {0}",
                "en": "ProductGroup is not found. ProductGroupId: {0}",
                "tr": "Ürün grubu bulunamadı. Ürün Grubu : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_GROUP_NOT_FOUND"
            }
          ]
        }
      },
      "put": {
        "operationId": "update-loan-product-group",
        "tags": [
          "product-groups"
        ],
        "summary": "update-loan-product-group",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductGroupId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "description": {
                    "type": "string",
                    "x-aura-field-code": "loanProductGroupDescription"
                  },
                  "groupType": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "loanProductGroupType",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "group_type",
                      "values": [
                        {
                          "value": 1,
                          "name": "Vehicle"
                        },
                        {
                          "value": 2,
                          "name": "Mortgage"
                        },
                        {
                          "value": 3,
                          "name": "Personel Finance"
                        },
                        {
                          "value": 4,
                          "name": "Other"
                        },
                        {
                          "value": 5,
                          "name": "Corporate Finance"
                        },
                        {
                          "value": 8,
                          "name": "Retail Loan",
                          "labels": {
                            "en": "Retail Loan",
                            "tr": "Bireysel Kredi"
                          }
                        }
                      ]
                    }
                  },
                  "isActive": {
                    "type": "boolean",
                    "x-aura-field-code": "isActive"
                  },
                  "name": {
                    "type": "string",
                    "x-aura-field-code": "loanProductGroupName"
                  },
                  "parentProductGroupId": {
                    "type": "string",
                    "format": "uuid",
                    "x-aura-field-code": "parentProductGroupId"
                  }
                },
                "required": [
                  "description",
                  "groupType",
                  "isActive",
                  "name"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 5,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "update-loan-product-group",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "product-groups/{id}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": null,
              "nullable": true,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "declared_type": "Unit",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body",
          "payload": "Unit"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_5",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على مجموعة المنتج. معرف مجموعة المنتج: {0}",
                "en": "ProductGroup is not found. ProductGroupId: {0}",
                "tr": "Ürün grubu bulunamadı. Ürün Grubu : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_GROUP_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products": {
      "get": {
        "operationId": "get-product-list",
        "tags": [
          "products"
        ],
        "summary": "get-product-list",
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. Returns a collection of records. Of 135 operations in this state that were probed (measured against a reference deployment on parameterless GET routes only), 118 answered and 118 returned a bare JSON array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "Array of catalog-declared response records.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "accountProductId": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "accountProductId"
                      },
                      "cashType": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "cashType"
                      },
                      "code": {
                        "type": "string",
                        "x-aura-field-code": "loanProductCode"
                      },
                      "dateDifference": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "dateDifference"
                      },
                      "description": {
                        "type": "string",
                        "x-aura-field-code": "loanProductGroupDescription"
                      },
                      "financeType": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "financeType"
                      },
                      "fundingSource": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "fundingSource"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "loanProductId"
                      },
                      "isActive": {
                        "type": "boolean",
                        "x-aura-field-code": "isActive"
                      },
                      "name": {
                        "type": "string",
                        "x-aura-field-code": "productName"
                      },
                      "productGroupId": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "productGroupId"
                      },
                      "productStatus": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "productStatus"
                      },
                      "profitCalculationMethod": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "profitCalculationMethod"
                      },
                      "proposalValidityDay": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "proposalValidityDay"
                      },
                      "rateTypes": {
                        "type": "array",
                        "items": {
                          "type": "integer",
                          "format": "int32",
                          "x-aura-field-code": "rateTypes"
                        }
                      }
                    }
                  },
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<ProductDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "ProductDto",
          "collection": true,
          "members": [
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Description",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ProductGroupId",
              "declared_type": "Guid?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "FundingSource",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProposalValidityDay",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ProfitCalculationMethod",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "FinanceType",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "DateDifference",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProductStatus",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            },
            {
              "name": "AccountProductId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "CashType",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "RateTypes",
              "declared_type": "List<int>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        }
      },
      "post": {
        "operationId": "create-loan-product",
        "tags": [
          "products"
        ],
        "summary": "create-loan-product",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "accountProductId": {
                    "type": "string",
                    "format": "uuid",
                    "x-aura-field-code": "accountProductId"
                  },
                  "cashType": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "cashType",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "cash_type",
                      "values": [
                        {
                          "value": 1,
                          "name": "Cash",
                          "labels": {
                            "en": "Cash",
                            "tr": "Peşin",
                            "ar": "نقدي"
                          }
                        },
                        {
                          "value": 2,
                          "name": "Non Cash",
                          "labels": {
                            "en": "Non Cash",
                            "tr": "Gayri Nakdi",
                            "ar": "غير نقدي"
                          }
                        }
                      ]
                    }
                  },
                  "code": {
                    "type": "string",
                    "x-aura-field-code": "loanProductCode"
                  },
                  "dateDifference": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "dateDifference",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "date_difference",
                      "values": [
                        {
                          "value": 1,
                          "name": "Bir yılı 360, taksitler arasındaki farkı 30 gün kabul eder.",
                          "labels": {
                            "en": "Considers a year as 360 days, assumes 30 days between installments.",
                            "tr": "Bir yılı 360, taksitler arasındaki farkı 30 gün kabul eder.",
                            "ar": "يعتبر السنة 360 يومًا، ويفترض 30 يومًا بين الأقساط."
                          }
                        },
                        {
                          "value": 2,
                          "name": "Bir yılı 365, taksitler arasındaki farkı 30 gün kabul eder.",
                          "labels": {
                            "en": "Considers a year as 365 days, assumes 30 days between installments.",
                            "tr": "Bir yılı 365, taksitler arasındaki farkı 30 gün kabul eder.",
                            "ar": "يعتبر السنة 365 يومًا، ويفترض 30 يومًا بين الأقساط."
                          }
                        },
                        {
                          "value": 3,
                          "name": "Bir yılı 360 olarak, taksitler arasındaki gerçek farkı dikkate alır.",
                          "labels": {
                            "en": "Considers a year as 360 days, taking into account the actual difference between installments.",
                            "tr": "Bir yılı 360 olarak, taksitler arasındaki gerçek farkı dikkate alır.",
                            "ar": "يعتبر السنة 360 يومًا، مع مراعاة الفرق الفعلي بين الأقساط."
                          }
                        },
                        {
                          "value": 4,
                          "name": "Bir yılı 365 olarak, taksitler arasındaki gerçek farkı dikkate alır.",
                          "labels": {
                            "en": "Considers a year as 365 days, taking into account the actual difference between installments.",
                            "tr": "Bir yılı 365 olarak, taksitler arasındaki gerçek farkı dikkate alır.",
                            "ar": "يعتبر السنة 365 يومًا، مع مراعاة الفرق الفعلي بين الأقساط."
                          }
                        },
                        {
                          "value": 5,
                          "name": "O yıl içindeki gün sayısını ve taksitler arasındaki gerçek farkı dikkate alır.",
                          "labels": {
                            "en": "Considers the actual number of days in that year and the actual difference between installments.",
                            "tr": "O yıl içindeki gün sayısını ve taksitler arasındaki gerçek farkı dikkate alır.",
                            "ar": "يأخذ في الاعتبار عدد الأيام الفعلي في تلك السنة والفرق الفعلي بين الأقساط."
                          }
                        }
                      ]
                    }
                  },
                  "description": {
                    "type": "string",
                    "x-aura-field-code": "loanProductDescription"
                  },
                  "financeType": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "financeType",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "finance_type",
                      "values": [
                        {
                          "value": 1,
                          "name": "Karz"
                        },
                        {
                          "value": 2,
                          "name": "Murabaha"
                        }
                      ]
                    }
                  },
                  "fundingSource": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "fundingSource",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "funding_source",
                      "values": [
                        {
                          "value": 1,
                          "name": "equity"
                        },
                        {
                          "value": 2,
                          "name": "pool"
                        }
                      ]
                    }
                  },
                  "name": {
                    "type": "string",
                    "x-aura-field-code": "productName"
                  },
                  "productGroupId": {
                    "type": "string",
                    "format": "uuid",
                    "x-aura-field-code": "productGroupId"
                  },
                  "productStatus": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "productStatus",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "product_status",
                      "values": [
                        {
                          "value": 1,
                          "name": "Sıfır Ürün",
                          "labels": {
                            "en": "New Product",
                            "ar": "منتج جديد"
                          }
                        },
                        {
                          "value": 2,
                          "name": "İkinci El Ürün",
                          "labels": {
                            "en": "Second Hand Product",
                            "ar": "منتج مستعمل"
                          }
                        }
                      ]
                    }
                  },
                  "profitCalculationMethod": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "profitCalculationMethod",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "profit_calculation_method",
                      "values": [
                        {
                          "value": 1,
                          "name": "Fixed Amount-fa"
                        },
                        {
                          "value": 2,
                          "name": "Reducing Balance-irr"
                        },
                        {
                          "value": 3,
                          "name": "Flat Rate-fr"
                        },
                        {
                          "value": 4,
                          "name": "XIRR"
                        },
                        {
                          "value": 5,
                          "name": "PMT"
                        }
                      ]
                    }
                  },
                  "proposalValidityDay": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "proposalValidityDay"
                  }
                },
                "required": [
                  "accountProductId",
                  "cashType",
                  "code",
                  "dateDifference",
                  "description",
                  "financeType",
                  "fundingSource",
                  "name",
                  "productGroupId",
                  "productStatus",
                  "profitCalculationMethod",
                  "proposalValidityDay"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 12,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares this returns a single record. Of 25 operations in this state with a probeable route, 8 answered and 6 returned a single record — the other two returned a collection and a bare boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "x-aura-field-code": "loanProductId"
                    }
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-loan-product",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Name",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Code",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Description",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "ProductGroupId",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "FundingSource",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProposalValidityDay",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProfitCalculationMethod",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "FinanceType",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "DateDifference",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProductStatus",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "AccountProductId",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "CashType",
              "declared_type": null,
              "nullable": true,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "AuraCommandDto",
          "payload": "AuraCommandDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_6",
              "status": 400,
              "message": {
                "ar": "يوجد تعريف بنفس رمز المنتج: {0}",
                "en": "There is a definition with the same ProductCode: {0}",
                "tr": "Aynı Ürün koduna sahip bir tanım var: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_IS_NOT_NULL"
            },
            {
              "code": "ERR_LPRDCT_7",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على مجموعة المنتج. معرّف مجموعة المنتج: {0}",
                "en": "ProductGroup is not found. ProductGroupId: {0}",
                "tr": "Ürün grubu bulunamadı. Ürün Grubu : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_GROUP_IS_NULL"
            },
            {
              "code": "ERR_LPRDCT_8",
              "status": 400,
              "message": {
                "ar": "مجموعة المنتج غير نشطة. معرف مجموعة المنتج: {0}",
                "en": "ProductGroup is not active. ProductGroupId: {0}",
                "tr": "Ürün grubu etkin değil. Ürün Grubu : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_IS_NOT_ACTIVE"
            },
            {
              "code": "ERR_LPRDCT_9",
              "status": 400,
              "message": {
                "ar": "لا ينبغي أن يكون هناك مجموعة منتج مختلفة تحت المجموعة التي سيتم ربط المنتج بها.",
                "en": "There should not be a different product group under the group to which the product will be associated.",
                "tr": "Ürünün ilişkilendirileceği grubun altında farklı bir ürün grubu olmamalıdır."
              },
              "message_available": true,
              "constant_name": "PRODUCT_GROUP_LIST_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/maturity-rate-matrix/update-rates": {
      "post": {
        "operationId": "update-product-maturity-rate",
        "tags": [
          "products"
        ],
        "summary": "update-product-maturity-rate",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "currencyId": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "currencyId"
                  },
                  "maturity": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "maturity"
                  },
                  "maxRate": {
                    "type": "number",
                    "format": "decimal",
                    "x-aura-field-code": "maxRate"
                  },
                  "minRate": {
                    "type": "number",
                    "format": "decimal",
                    "x-aura-field-code": "minRate"
                  }
                },
                "required": [
                  "currencyId",
                  "maturity",
                  "maxRate",
                  "minRate"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 4,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "update-product-maturity-rate",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/maturity-rate-matrix/update-rates",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Maturity",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "MinRate",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "MaxRate",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "CurrencyId",
              "declared_type": null,
              "nullable": true,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        }
      }
    },
    "/products/product-trees": {
      "get": {
        "operationId": "get-product-tree-list",
        "tags": [
          "products"
        ],
        "summary": "get-product-tree-list",
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The schema is an `anyOf` over three envelopes: the record, a bare array of it, and a page `{total, data[]}` carrying the same record.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "Response whose record fields are declared but whose outer cardinality is not established by the catalog.",
                  "anyOf": [
                    {
                      "type": "object",
                      "properties": {
                        "childProductTrees": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "isActive": {
                                "type": "boolean",
                                "x-aura-field-code": "isActive"
                              },
                              "isLeafLevel": {
                                "type": "boolean",
                                "x-aura-field-code": "isLeafLevel"
                              },
                              "productCode": {
                                "type": "string",
                                "x-aura-field-code": "productCode"
                              }
                            },
                            "x-aura-field-code": "childProductTrees"
                          }
                        },
                        "isActive": {
                          "type": "boolean",
                          "x-aura-field-code": "isActive"
                        },
                        "parentProductGroupCode": {
                          "type": "string",
                          "x-aura-field-code": "parentProductGroupCode"
                        },
                        "productGroupCode": {
                          "type": "string",
                          "x-aura-field-code": "productGroupCode"
                        }
                      }
                    },
                    {
                      "type": "array",
                      "description": "Bare-array response possibility.",
                      "items": {
                        "type": "object",
                        "properties": {
                          "childProductTrees": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "isActive": {
                                  "type": "boolean",
                                  "x-aura-field-code": "isActive"
                                },
                                "isLeafLevel": {
                                  "type": "boolean",
                                  "x-aura-field-code": "isLeafLevel"
                                },
                                "productCode": {
                                  "type": "string",
                                  "x-aura-field-code": "productCode"
                                }
                              },
                              "x-aura-field-code": "childProductTrees"
                            }
                          },
                          "isActive": {
                            "type": "boolean",
                            "x-aura-field-code": "isActive"
                          },
                          "parentProductGroupCode": {
                            "type": "string",
                            "x-aura-field-code": "parentProductGroupCode"
                          },
                          "productGroupCode": {
                            "type": "string",
                            "x-aura-field-code": "productGroupCode"
                          }
                        }
                      },
                      "x-aura-documentation": {
                        "language": "en",
                        "status": "structural-fallback",
                        "source": "catalog-structure"
                      }
                    },
                    {
                      "type": "object",
                      "description": "Paged response envelope observed on the BFF response path.",
                      "x-aura-documentation": {
                        "language": "en",
                        "status": "structural-fallback",
                        "source": "catalog-structure"
                      },
                      "properties": {
                        "data": {
                          "type": "array",
                          "description": "Response records carried by this page.",
                          "items": {
                            "type": "object",
                            "properties": {
                              "childProductTrees": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "isActive": {
                                      "type": "boolean",
                                      "x-aura-field-code": "isActive"
                                    },
                                    "isLeafLevel": {
                                      "type": "boolean",
                                      "x-aura-field-code": "isLeafLevel"
                                    },
                                    "productCode": {
                                      "type": "string",
                                      "x-aura-field-code": "productCode"
                                    }
                                  },
                                  "x-aura-field-code": "childProductTrees"
                                }
                              },
                              "isActive": {
                                "type": "boolean",
                                "x-aura-field-code": "isActive"
                              },
                              "parentProductGroupCode": {
                                "type": "string",
                                "x-aura-field-code": "parentProductGroupCode"
                              },
                              "productGroupCode": {
                                "type": "string",
                                "x-aura-field-code": "productGroupCode"
                              }
                            }
                          },
                          "x-aura-documentation": {
                            "language": "en",
                            "status": "structural-fallback",
                            "source": "catalog-structure"
                          }
                        },
                        "total": {
                          "type": "integer",
                          "format": "int64",
                          "description": "Total matching records, ignoring paging.",
                          "x-aura-documentation": {
                            "language": "en",
                            "status": "structural-fallback",
                            "source": "catalog-structure"
                          }
                        }
                      },
                      "required": [
                        "data"
                      ]
                    }
                  ],
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-tree-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/product-trees",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "no-members",
          "note": "`ProductTreeDto` was parsed from this repository but the parse found no members on it. An empty declaration and a parse that missed them look the same from here, so this page asserts neither.",
          "declared_type": "ProductTreeDto",
          "payload": "ProductTreeDto"
        }
      }
    },
    "/products/{id}": {
      "get": {
        "operationId": "get-product-by-id",
        "tags": [
          "products"
        ],
        "summary": "get-product-by-id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares this returns a single record. Of 25 operations in this state with a probeable route, 8 answered and 6 returned a single record — the other two returned a collection and a bare boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "accountProductId": {
                      "type": "string",
                      "format": "uuid",
                      "x-aura-field-code": "accountProductId"
                    },
                    "cashType": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "cashType"
                    },
                    "code": {
                      "type": "string",
                      "x-aura-field-code": "loanProductCode"
                    },
                    "dateDifference": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "dateDifference"
                    },
                    "description": {
                      "type": "string",
                      "x-aura-field-code": "loanProductGroupDescription"
                    },
                    "financeType": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "financeType"
                    },
                    "fundingSource": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "fundingSource"
                    },
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "x-aura-field-code": "loanProductId"
                    },
                    "isActive": {
                      "type": "boolean",
                      "x-aura-field-code": "isActive"
                    },
                    "name": {
                      "type": "string",
                      "x-aura-field-code": "productName"
                    },
                    "productGroupId": {
                      "type": "string",
                      "format": "uuid",
                      "x-aura-field-code": "productGroupId"
                    },
                    "productStatus": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "productStatus"
                    },
                    "profitCalculationMethod": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "profitCalculationMethod"
                    },
                    "proposalValidityDay": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "proposalValidityDay"
                    }
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-by-id",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "ProductDto",
          "payload": "ProductDto",
          "collection": false,
          "members": [
            {
              "name": "Code",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "Description",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ProductGroupId",
              "declared_type": "Guid?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "FundingSource",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProposalValidityDay",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "ProfitCalculationMethod",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "FinanceType",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "DateDifference",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProductStatus",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            },
            {
              "name": "AccountProductId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "CashType",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "RateTypes",
              "declared_type": "List<int>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "put": {
        "operationId": "update-loan-product",
        "tags": [
          "products"
        ],
        "summary": "update-loan-product",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "accountProductId": {
                    "type": "string",
                    "format": "uuid",
                    "x-aura-field-code": "accountProductId"
                  },
                  "cashType": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "cashType",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "cash_type",
                      "values": [
                        {
                          "value": 1,
                          "name": "Cash",
                          "labels": {
                            "en": "Cash",
                            "tr": "Peşin",
                            "ar": "نقدي"
                          }
                        },
                        {
                          "value": 2,
                          "name": "Non Cash",
                          "labels": {
                            "en": "Non Cash",
                            "tr": "Gayri Nakdi",
                            "ar": "غير نقدي"
                          }
                        }
                      ]
                    }
                  },
                  "dateDifference": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "dateDifference",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "date_difference",
                      "values": [
                        {
                          "value": 1,
                          "name": "Bir yılı 360, taksitler arasındaki farkı 30 gün kabul eder.",
                          "labels": {
                            "en": "Considers a year as 360 days, assumes 30 days between installments.",
                            "tr": "Bir yılı 360, taksitler arasındaki farkı 30 gün kabul eder.",
                            "ar": "يعتبر السنة 360 يومًا، ويفترض 30 يومًا بين الأقساط."
                          }
                        },
                        {
                          "value": 2,
                          "name": "Bir yılı 365, taksitler arasındaki farkı 30 gün kabul eder.",
                          "labels": {
                            "en": "Considers a year as 365 days, assumes 30 days between installments.",
                            "tr": "Bir yılı 365, taksitler arasındaki farkı 30 gün kabul eder.",
                            "ar": "يعتبر السنة 365 يومًا، ويفترض 30 يومًا بين الأقساط."
                          }
                        },
                        {
                          "value": 3,
                          "name": "Bir yılı 360 olarak, taksitler arasındaki gerçek farkı dikkate alır.",
                          "labels": {
                            "en": "Considers a year as 360 days, taking into account the actual difference between installments.",
                            "tr": "Bir yılı 360 olarak, taksitler arasındaki gerçek farkı dikkate alır.",
                            "ar": "يعتبر السنة 360 يومًا، مع مراعاة الفرق الفعلي بين الأقساط."
                          }
                        },
                        {
                          "value": 4,
                          "name": "Bir yılı 365 olarak, taksitler arasındaki gerçek farkı dikkate alır.",
                          "labels": {
                            "en": "Considers a year as 365 days, taking into account the actual difference between installments.",
                            "tr": "Bir yılı 365 olarak, taksitler arasındaki gerçek farkı dikkate alır.",
                            "ar": "يعتبر السنة 365 يومًا، مع مراعاة الفرق الفعلي بين الأقساط."
                          }
                        },
                        {
                          "value": 5,
                          "name": "O yıl içindeki gün sayısını ve taksitler arasındaki gerçek farkı dikkate alır.",
                          "labels": {
                            "en": "Considers the actual number of days in that year and the actual difference between installments.",
                            "tr": "O yıl içindeki gün sayısını ve taksitler arasındaki gerçek farkı dikkate alır.",
                            "ar": "يأخذ في الاعتبار عدد الأيام الفعلي في تلك السنة والفرق الفعلي بين الأقساط."
                          }
                        }
                      ]
                    }
                  },
                  "description": {
                    "type": "string",
                    "x-aura-field-code": "loanProductDescription"
                  },
                  "financeType": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "financeType",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "finance_type",
                      "values": [
                        {
                          "value": 1,
                          "name": "Karz"
                        },
                        {
                          "value": 2,
                          "name": "Murabaha"
                        }
                      ]
                    }
                  },
                  "fundingSource": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "fundingSource",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "funding_source",
                      "values": [
                        {
                          "value": 1,
                          "name": "equity"
                        },
                        {
                          "value": 2,
                          "name": "pool"
                        }
                      ]
                    }
                  },
                  "isActive": {
                    "type": "boolean",
                    "x-aura-field-code": "loanProductIsActive"
                  },
                  "name": {
                    "type": "string",
                    "x-aura-field-code": "productName"
                  },
                  "productGroupId": {
                    "type": "string",
                    "format": "uuid",
                    "x-aura-field-code": "productGroupId"
                  },
                  "productStatus": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "productStatus",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "product_status",
                      "values": [
                        {
                          "value": 1,
                          "name": "Sıfır Ürün",
                          "labels": {
                            "en": "New Product",
                            "ar": "منتج جديد"
                          }
                        },
                        {
                          "value": 2,
                          "name": "İkinci El Ürün",
                          "labels": {
                            "en": "Second Hand Product",
                            "ar": "منتج مستعمل"
                          }
                        }
                      ]
                    }
                  },
                  "profitCalculationMethod": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "profitCalculationMethod",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "profit_calculation_method",
                      "values": [
                        {
                          "value": 1,
                          "name": "Fixed Amount-fa"
                        },
                        {
                          "value": 2,
                          "name": "Reducing Balance-irr"
                        },
                        {
                          "value": 3,
                          "name": "Flat Rate-fr"
                        },
                        {
                          "value": 4,
                          "name": "XIRR"
                        },
                        {
                          "value": 5,
                          "name": "PMT"
                        }
                      ]
                    }
                  },
                  "proposalValidityDay": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "proposalValidityDay"
                  }
                },
                "required": [
                  "accountProductId",
                  "cashType",
                  "dateDifference",
                  "description",
                  "financeType",
                  "fundingSource",
                  "isActive",
                  "name",
                  "productGroupId",
                  "productStatus",
                  "profitCalculationMethod",
                  "proposalValidityDay"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 12,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "update-loan-product",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Description",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "ProductGroupId",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "FundingSource",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProposalValidityDay",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProfitCalculationMethod",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "FinanceType",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "DateDifference",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "ProductStatus",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "AccountProductId",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "CashType",
              "declared_type": null,
              "nullable": true,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_7",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على مجموعة المنتج. معرّف مجموعة المنتج: {0}",
                "en": "ProductGroup is not found. ProductGroupId: {0}",
                "tr": "Ürün grubu bulunamadı. Ürün Grubu : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_GROUP_IS_NULL"
            },
            {
              "code": "ERR_LPRDCT_8",
              "status": 400,
              "message": {
                "ar": "مجموعة المنتج غير نشطة. معرف مجموعة المنتج: {0}",
                "en": "ProductGroup is not active. ProductGroupId: {0}",
                "tr": "Ürün grubu etkin değil. Ürün Grubu : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_IS_NOT_ACTIVE"
            },
            {
              "code": "ERR_LPRDCT_9",
              "status": 400,
              "message": {
                "ar": "لا ينبغي أن يكون هناك مجموعة منتج مختلفة تحت المجموعة التي سيتم ربط المنتج بها.",
                "en": "There should not be a different product group under the group to which the product will be associated.",
                "tr": "Ürünün ilişkilendirileceği grubun altında farklı bir ürün grubu olmamalıdır."
              },
              "message_available": true,
              "constant_name": "PRODUCT_GROUP_LIST_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/currencies": {
      "get": {
        "operationId": "get-product-currency-list",
        "tags": [
          "products"
        ],
        "summary": "get-product-currency-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "x-aura-field-code": "code"
                },
                "expression": {
                  "type": "string",
                  "x-aura-field-code": "expression"
                },
                "parameters": {
                  "type": "object",
                  "x-aura-field-code": "filterParameters"
                }
              },
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. Returns a collection of records. Of 135 operations in this state that were probed (measured against a reference deployment on parameterless GET routes only), 118 answered and 118 returned a bare JSON array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "Array of catalog-declared response records.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "currencyNumber": {
                        "type": "string",
                        "x-aura-field-code": "currencyNumber"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "productCurrencyId"
                      }
                    }
                  },
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-currency-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/currencies",
        "x-aura-capabilities": {
          "caching": true,
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<CurrencyDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "CurrencyDto",
          "collection": true,
          "members": [
            {
              "name": "CurrencyNumber",
              "declared_type": "string",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "create-loan-product-currency",
        "tags": [
          "products"
        ],
        "summary": "create-loan-product-currency",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "currencyNumbers": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "x-aura-field-code": "productCurrencies"
                    }
                  }
                },
                "required": [
                  "currencyNumbers"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-loan-product-currency",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/currencies",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_36",
              "status": 400,
              "message": {
                "ar": "نوع العملة المرسلة معرف في هذا المنتج.",
                "en": "The currency type sent is defined in this product.",
                "tr": "Gönderilen para birimi türü bu üründe tanımlanmıştır."
              },
              "message_available": true,
              "constant_name": "SAME_PRODUCT_CURRENCY"
            }
          ]
        }
      }
    },
    "/products/{id}/currencies/{productCurrencyId}": {
      "delete": {
        "operationId": "delete-loan-product-currency",
        "tags": [
          "products"
        ],
        "summary": "delete-loan-product-currency",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "productCurrencyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "productCurrencyId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "delete-loan-product-currency",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/currencies/{productCurrencyId}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "ProductCurrencyId",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_16",
              "status": 400,
              "message": {
                "ar": "السجل الخاص بالعملة للمنتج غير موجود. المعرف: {0}",
                "en": "Product - Currency record is not found. Id : {0}",
                "tr": "Ürün - Para Birimi kaydı bulunamadı. : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_CURRENCIES_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/customer-maps": {
      "get": {
        "operationId": "get-product-customer-map-list",
        "tags": [
          "products"
        ],
        "summary": "get-product-customer-map-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "x-aura-field-code": "code"
                },
                "expression": {
                  "type": "string",
                  "x-aura-field-code": "expression"
                },
                "parameters": {
                  "type": "object",
                  "x-aura-field-code": "filterParameters"
                }
              },
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. Returns a collection of records. Of 135 operations in this state that were probed (measured against a reference deployment on parameterless GET routes only), 118 answered and 118 returned a bare JSON array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "Array of catalog-declared response records.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "customerType": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "customerType"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "customerMapId"
                      }
                    }
                  },
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-customer-map-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/customer-maps",
        "x-aura-capabilities": {
          "caching": true,
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<CustomerMapDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "CustomerMapDto",
          "collection": true,
          "members": [
            {
              "name": "CustomerType",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "create-loan-product-customer-map",
        "tags": [
          "products"
        ],
        "summary": "create-loan-product-customer-map",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "customerTypes": {
                    "type": "array",
                    "items": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "loanProductCustomerTypes"
                    }
                  }
                },
                "required": [
                  "customerTypes"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-loan-product-customer-map",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/customer-maps",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_32",
              "status": 400,
              "message": {
                "ar": "تم حفظ نوع العميل من قبل. نوع العميل: {0}",
                "en": "Customer type has been saved before. CustomerType:{0}",
                "tr": "Müşteri türü daha önce kaydedilmişti. Müşteri tipi: {0}"
              },
              "message_available": true,
              "constant_name": "SAME_PRODUCT_CUSTOMER_TYPE"
            }
          ]
        }
      }
    },
    "/products/{id}/customer-maps/{customerMapId}": {
      "delete": {
        "operationId": "delete-loan-product-customer-map",
        "tags": [
          "products"
        ],
        "summary": "delete-loan-product-customer-map",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "customerMapId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "customerMapId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "delete-loan-product-customer-map",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/customer-maps/{customerMapId}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "CustomerMapId",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_29",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على سجل نوع العميل للمنتج. المعرف: {0}",
                "en": "Product-Customertype record is not found. Id: {0}",
                "tr": "Ürün-Müşteri tipi kaydı bulunamadı. : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_CUSTOMER_MAPS_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/details": {
      "get": {
        "operationId": "get-product-details-by-id",
        "tags": [
          "products"
        ],
        "summary": "get-product-details-by-id",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "cashType": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "cashType"
                  }
                },
                "required": [
                  "cashType"
                ]
              }
            }
          },
          "description": "The catalog declares Body-bound fields on this GET operation. Request bodies on GET have no defined semantics in HTTP; this documents the catalog, not a recommendation. Not every field below is accepted: the platform selects which of them this operation admits and drops the rest. Of the fields below, the binder does not admit `cashType`, which this document nevertheless marks required because the catalog declares it so.",
          "x-aura-documentation": {
            "language": "en",
            "status": "structural-fallback",
            "source": "catalog-structure"
          }
        },
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [
            "body"
          ],
          "dropped_field_names": {
            "body": [
              "cashType"
            ]
          },
          "dropped_mandatory_field_names": [
            "cashType"
          ],
          "verdict": "declared-fields-not-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": "The HTTP edge in front of this operation comes in two shapes and they differ: the platform's typed route readers bind GET and DELETE from the URL and never read a body, while its untyped catalog-redirect reader collects the body whenever the request carries one. It does not change the answer above: the selection below happens after the edge, and excludes these fields either way."
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a single-record.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-details-by-id",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/details",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "ProductDetailsDto",
          "payload": "ProductDetailsDto",
          "collection": false,
          "members": [
            {
              "name": "SpecialCondition",
              "declared_type": "SpecialConditionDto",
              "nullable": false,
              "collection": false
            },
            {
              "name": "CustomerMaps",
              "declared_type": "List<CustomerMapDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "Currencies",
              "declared_type": "List<CurrencyDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "Discounts",
              "declared_type": "List<DiscountDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "Penalties",
              "declared_type": "List<PenaltyDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "PaybackPlans",
              "declared_type": "List<PaybackPlanDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "MaturityRateMatrix",
              "declared_type": "List<MaturityRateMatrixDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "Taxes",
              "declared_type": "List<TaxDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "ExpenseItems",
              "declared_type": "List<ExpenseItemDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "ProductRisks",
              "declared_type": "List<LoanProductRiskLevelDto>",
              "nullable": false,
              "collection": true
            },
            {
              "name": "Fields",
              "declared_type": "List<FieldDto>",
              "nullable": false,
              "collection": true
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a single-record.",
          "code_response_state": "structure",
          "code_cardinality": "single-record",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/discounts": {
      "get": {
        "operationId": "get-discount-list",
        "tags": [
          "products"
        ],
        "summary": "get-discount-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a collection.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-discount-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/discounts",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<DiscountDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "DiscountDto",
          "collection": true,
          "members": [
            {
              "name": "DiscountRate",
              "declared_type": "decimal?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "CalculationMethod",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a collection.",
          "code_response_state": "structure",
          "code_cardinality": "collection",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "create-loan-product-discount",
        "tags": [
          "products"
        ],
        "summary": "create-loan-product-discount",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "calculationMethod": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "calculationMethod",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "discount_method",
                      "values": [
                        {
                          "value": 1,
                          "name": "discount_x",
                          "labels": {
                            "en": "General Discount Calculation",
                            "tr": "Genel İndirim Hesaplama",
                            "ar": "حساب الخصم العام"
                          }
                        },
                        {
                          "value": 2,
                          "name": "discount_y"
                        }
                      ]
                    }
                  },
                  "discountRate": {
                    "type": "number",
                    "format": "decimal",
                    "x-aura-field-code": "discountRate"
                  }
                },
                "required": [
                  "calculationMethod",
                  "discountRate"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 2,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares this returns a single record. Of 25 operations in this state with a probeable route, 8 answered and 6 returned a single record — the other two returned a collection and a bare boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "x-aura-field-code": "loanProductDiscountId"
                    }
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-loan-product-discount",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/discounts",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "DiscountRate",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "CalculationMethod",
              "declared_type": null,
              "nullable": true,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "AuraCommandDto",
          "payload": "AuraCommandDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_18",
              "status": 400,
              "message": {
                "ar": "هناك بالفعل تعريف لخصم الدفع المبكر لهذا المنتج.",
                "en": "There is already a early payment discount definition for this product.",
                "tr": "Bu ürün için zaten erken ödeme indirimi tanımı var."
              },
              "message_available": true,
              "constant_name": "PRODUCT_DISCOUNT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/discounts/{discountId}": {
      "delete": {
        "operationId": "delete-loan-product-discount",
        "tags": [
          "products"
        ],
        "summary": "delete-loan-product-discount",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "discountId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductDiscountId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "delete-loan-product-discount",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/discounts/{discountId}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "DiscountId",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_20",
              "status": 400,
              "message": {
                "ar": "لا يتم العثور على سجل خصم الدفع المبكر. المعرف: {0}",
                "en": "Early payment discount record is not found. Id: {0}",
                "tr": "Erken ödeme indirimi kaydı bulunamadı. : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_DISCOUNTS_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/expense-items": {
      "get": {
        "operationId": "get-product-expense-item-list",
        "tags": [
          "products"
        ],
        "summary": "get-product-expense-item-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Present in the route template but not declared as a Route-bound field in the catalog.",
            "x-aura-source": "route-template-only"
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 0,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-expense-item-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/expense-items",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<ExpenseItemDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "ExpenseItemDto",
          "collection": true,
          "members": [
            {
              "name": "ExpenseItemId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "create-product-expense-item",
        "tags": [
          "products"
        ],
        "summary": "create-product-expense-item",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "expenseItemIds": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "x-aura-field-code": "expenseItemIds"
                    }
                  }
                },
                "required": [
                  "expenseItemIds"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-product-expense-item",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/expense-items",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/expense-items/{productExpenseItemId}": {
      "delete": {
        "operationId": "delete-product-expense-item",
        "tags": [
          "products"
        ],
        "summary": "delete-product-expense-item",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          },
          {
            "name": "productExpenseItemId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "productExpenseItemId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "delete-product-expense-item",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/expense-items/{productExpenseItemId}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "ProductExpenseItemId",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_49",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PRODUCT_EXPENSE_ITEM_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/fields": {
      "get": {
        "operationId": "get-product-field-list",
        "tags": [
          "products"
        ],
        "summary": "get-product-field-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "properties": {
                "code": {
                  "x-aura-type": "unresolved"
                },
                "expression": {
                  "type": "string",
                  "x-aura-field-code": "expression"
                },
                "parameters": {
                  "type": "object",
                  "properties": {
                    "comparer": {
                      "type": "object",
                      "x-aura-field-code": "comparer"
                    },
                    "count": {
                      "type": "integer",
                      "format": "int32",
                      "x-aura-field-code": "count"
                    },
                    "item": {
                      "type": "object",
                      "x-aura-field-code": "item"
                    },
                    "keys": {
                      "x-aura-type": "unresolved"
                    },
                    "values": {
                      "x-aura-type": "unresolved"
                    }
                  },
                  "x-aura-type": "unresolved"
                }
              },
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. Returns a collection of records. Of 135 operations in this state that were probed (measured against a reference deployment on parameterless GET routes only), 118 answered and 118 returned a bare JSON array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "Array of catalog-declared response records.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "businessFieldDefinitionId": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "businessFieldDefinitionId"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "loanProductFieldId"
                      },
                      "isActive": {
                        "type": "boolean",
                        "x-aura-field-code": "isActive"
                      },
                      "isMandatory": {
                        "type": "boolean",
                        "x-aura-field-code": "isMandatory"
                      },
                      "loanProductId": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "loanProductId"
                      },
                      "sequenceNumber": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "sequenceNumber"
                      }
                    }
                  },
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-field-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/fields",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<FieldDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "FieldDto",
          "collection": true,
          "members": [
            {
              "name": "IsMandatory",
              "declared_type": "bool",
              "nullable": false,
              "collection": false
            },
            {
              "name": "BusinessFieldDefinitionId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "LoanProductId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsActive",
              "declared_type": "bool?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "SequenceNumber",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "create-product-field",
        "tags": [
          "products"
        ],
        "summary": "create-product-field",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "fieldItems": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "businessFieldDefinitionId": {
                          "type": "string",
                          "format": "uuid",
                          "x-aura-field-code": "businessFieldDefinitionId"
                        },
                        "isActive": {
                          "type": "boolean",
                          "x-aura-field-code": "isActive"
                        },
                        "isMandatory": {
                          "type": "boolean",
                          "x-aura-field-code": "isMandatory"
                        },
                        "sequenceNumber": {
                          "type": "integer",
                          "format": "int32",
                          "x-aura-field-code": "sequenceNumber"
                        }
                      },
                      "required": [
                        "businessFieldDefinitionId",
                        "isActive",
                        "isMandatory",
                        "sequenceNumber"
                      ],
                      "x-aura-field-code": "fieldItems"
                    }
                  }
                },
                "required": [
                  "fieldItems"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-product-field",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/fields",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/fields/{fieldId}": {
      "delete": {
        "operationId": "delete-product-field",
        "tags": [
          "products"
        ],
        "summary": "delete-product-field",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "fieldId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "fieldId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "delete-product-field",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/fields/{fieldId}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "FieldId",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_38",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على سجل حقل المنتج.",
                "en": "Product field record is not found.",
                "tr": "Ürün alan bilgisi bulunamadı."
              },
              "message_available": true,
              "constant_name": "PRODUCT_FIELDS_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/maturity-rate-matrix": {
      "get": {
        "operationId": "get-loan-product-maturity-rate-matrix-list",
        "tags": [
          "products"
        ],
        "summary": "get-loan-product-maturity-rate-matrix-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "extendedPropertyValues",
            "in": "query",
            "required": false,
            "schema": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "x-aura-field-code": "proposalExtendedPropertyValueName"
                  },
                  "value": {
                    "type": "string",
                    "x-aura-field-code": "proposalExtendedPropertyValue"
                  }
                },
                "x-aura-field-code": "proposalExtendedPropertyValues"
              }
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 6
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. Returns a collection of records. Of 135 operations in this state that were probed (measured against a reference deployment on parameterless GET routes only), 118 answered and 118 returned a bare JSON array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "Array of catalog-declared response records.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "basePriceId": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "basePriceId"
                      },
                      "currencyId": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "currencyId"
                      },
                      "defaultRate": {
                        "type": "number",
                        "format": "decimal",
                        "x-aura-field-code": "defaultRate"
                      },
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "maturityRateMatrixId"
                      },
                      "loanGrantingRate": {
                        "type": "number",
                        "format": "decimal",
                        "x-aura-field-code": "loanGrantingRate"
                      },
                      "maxInstallmentCount": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "maxInstallmentCount"
                      },
                      "maxProductAmount": {
                        "type": "number",
                        "format": "decimal",
                        "x-aura-field-code": "maxProductAmount"
                      },
                      "maxRate": {
                        "type": "number",
                        "format": "decimal",
                        "x-aura-field-code": "maxRate"
                      },
                      "mcc": {
                        "type": "string",
                        "x-aura-field-code": "mcc"
                      },
                      "minInstallmentCount": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "minInstallmentCount"
                      },
                      "minProductAmount": {
                        "type": "number",
                        "format": "decimal",
                        "x-aura-field-code": "minProductAmount"
                      },
                      "minRate": {
                        "type": "number",
                        "format": "decimal",
                        "x-aura-field-code": "minRate"
                      },
                      "poscode": {
                        "type": "string",
                        "x-aura-field-code": "poscode"
                      }
                    }
                  },
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-loan-product-maturity-rate-matrix-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/maturity-rate-matrix",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<MaturityRateMatrixDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "MaturityRateMatrixDto",
          "collection": true,
          "members": [
            {
              "name": "MinInstallmentCount",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "MaxInstallmentCount",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "DefaultRate",
              "declared_type": "decimal",
              "nullable": false,
              "collection": false
            },
            {
              "name": "MinRate",
              "declared_type": "decimal",
              "nullable": false,
              "collection": false
            },
            {
              "name": "MaxRate",
              "declared_type": "decimal",
              "nullable": false,
              "collection": false
            },
            {
              "name": "MinProductAmount",
              "declared_type": "decimal",
              "nullable": false,
              "collection": false
            },
            {
              "name": "MaxProductAmount",
              "declared_type": "decimal",
              "nullable": false,
              "collection": false
            },
            {
              "name": "LoanGrantingRate",
              "declared_type": "decimal",
              "nullable": false,
              "collection": false
            },
            {
              "name": "RateTypePr",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "PercentageRate",
              "declared_type": "decimal?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "CurrencyId",
              "declared_type": "int?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "BasePriceId",
              "declared_type": "Guid?",
              "nullable": true,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "create-maturity-rate-matrix",
        "tags": [
          "products"
        ],
        "summary": "create-maturity-rate-matrix",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "maturityRateMatrixItems": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "basePriceId": {
                          "type": "string",
                          "format": "uuid",
                          "x-aura-field-code": "basePriceId"
                        },
                        "currencyId": {
                          "type": "integer",
                          "format": "int32",
                          "x-aura-field-code": "currencyId"
                        },
                        "defaultRate": {
                          "type": "number",
                          "format": "decimal",
                          "x-aura-field-code": "defaultRate"
                        },
                        "extendedPropertyValues": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "properties": {
                              "name": {
                                "type": "string",
                                "x-aura-field-code": "extendedPropertyValueName"
                              },
                              "value": {
                                "type": "string",
                                "x-aura-field-code": "extendedPropertyValue"
                              }
                            },
                            "required": [
                              "name",
                              "value"
                            ],
                            "x-aura-field-code": "extendedPropertyValues"
                          }
                        },
                        "loanGrantingRate": {
                          "type": "number",
                          "format": "decimal",
                          "x-aura-field-code": "loanGrantingRate"
                        },
                        "maxInstallmentCount": {
                          "type": "integer",
                          "format": "int32",
                          "x-aura-field-code": "maxInstallmentCount"
                        },
                        "maxProductAmount": {
                          "type": "number",
                          "format": "decimal",
                          "x-aura-field-code": "maxProductAmount"
                        },
                        "maxRate": {
                          "type": "number",
                          "format": "decimal",
                          "x-aura-field-code": "maxRate"
                        },
                        "minInstallmentCount": {
                          "type": "integer",
                          "format": "int32",
                          "x-aura-field-code": "minInstallmentCount"
                        },
                        "minProductAmount": {
                          "type": "number",
                          "format": "decimal",
                          "x-aura-field-code": "minProductAmount"
                        },
                        "minRate": {
                          "type": "number",
                          "format": "decimal",
                          "x-aura-field-code": "minRate"
                        },
                        "percentageRate": {
                          "type": "number",
                          "format": "decimal",
                          "x-aura-field-code": "percentageRate"
                        },
                        "rateTypePr": {
                          "type": "integer",
                          "format": "int32",
                          "x-aura-field-code": "rateTypePr"
                        }
                      },
                      "required": [
                        "currencyId",
                        "defaultRate",
                        "loanGrantingRate",
                        "maxInstallmentCount",
                        "maxProductAmount",
                        "maxRate",
                        "minInstallmentCount",
                        "minProductAmount",
                        "minRate",
                        "rateTypePr"
                      ],
                      "x-aura-field-code": "maturityRateMatrixItems"
                    }
                  }
                },
                "required": [
                  "maturityRateMatrixItems"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-maturity-rate-matrix",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/maturity-rate-matrix",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_11",
              "status": 400,
              "message": {
                "ar": "يجب أن يكون الحد الأدنى لعدد الأقساط أقل من أو يساوي الحد الأقصى لعدد الأقساط.",
                "en": "Min installment count must be less than or equal to max installment count.",
                "tr": "Minimum taksit sayısı, maksimum taksit sayısından küçük veya ona eşit olmalıdır."
              },
              "message_available": true,
              "constant_name": "PRODUCT_MATURITY_RATE_MATRIX_ITEMS_INSTALLMENT_COUNT_CONTROL"
            },
            {
              "code": "ERR_LPRDCT_12",
              "status": 400,
              "message": {
                "ar": "يجب أن يكون معدل التخلف عن السداد ضمن نطاق المعدل الأدنى والمعدل الأقصى.",
                "en": "Default rate must be in the range of min rate and max rate.",
                "tr": "Varsayılan oran, minimum oran ve maksimum oran aralığında olmalıdır."
              },
              "message_available": true,
              "constant_name": "PRODUCT_MATURITY_RATE_MATRIX_ITEMS_DEFAULT_RATE_CONTROL"
            },
            {
              "code": "ERR_LPRDCT_13",
              "status": 400,
              "message": {
                "ar": "يجب أن يكون الحد الأدنى للسعر أقل من أو يساوي الحد الأقصى للسعر.",
                "en": "Min rate must be less than or equal to max rate.",
                "tr": "Minimum oran, maksimum orana eşit veya daha az olmalıdır."
              },
              "message_available": true,
              "constant_name": "PRODUCT_MATURITY_RATE_MATRIX_ITEMS_MIN_RATE_CONTROL"
            },
            {
              "code": "ERR_LPRDCT_14",
              "status": 400,
              "message": {
                "ar": "لا يمكن أن تكون عدد الأقساط الأدنى أصغر من عدد الأقساط الأقصى في سطر مختلف، وأكبر من عدد الأقساط الأدنى.",
                "en": "Min installment counts cannot be smaller than maximum installment counts in a different line, and greater than the min installment counts.",
                "tr": "Minimum taksit sayısı, farklı bir satırdaki maksimum taksit sayısından küçük ve minimum taksit sayısından büyük olamaz."
              },
              "message_available": true,
              "constant_name": "PRODUCT_MATURITY_RATE_MATRIX_ITEMS_INSTALLMENT_COUNT_SPECIFIC_CONTROL"
            },
            {
              "code": "ERR_LPRDCT_XX",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "PRODUCT_MATURITY_RATE_MATRIX_ITEMS_MIN_PRODUCT_AMOUNT_CONTROL"
            }
          ]
        }
      }
    },
    "/products/{id}/maturity-rate-matrix/{maturityRateMatrixId}": {
      "delete": {
        "operationId": "delete-loan-product-maturity-rate-matrix",
        "tags": [
          "products"
        ],
        "summary": "delete-loan-product-maturity-rate-matrix",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "maturityRateMatrixId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "maturityRateMatrixId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "delete-loan-product-maturity-rate-matrix",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/maturity-rate-matrix/{maturityRateMatrixId}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "MaturityRateMatrixId",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_15",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على سجل معدل النضج. المعرف: {0}",
                "en": "Maturity rate record is not found. Id: {0}",
                "tr": "Vade oranı kaydı bulunamadı. : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_MATURITY_RATE_MATRIX_ITEMS_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/payback-plans": {
      "get": {
        "operationId": "get-product-payback-plan-list",
        "tags": [
          "products"
        ],
        "summary": "get-product-payback-plan-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. Returns a collection of records. Of 135 operations in this state that were probed (measured against a reference deployment on parameterless GET routes only), 118 answered and 118 returned a bare JSON array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "Array of catalog-declared response records.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "loanProductPaybackPlanId"
                      },
                      "maxPostponedInstallmentCount": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "maxPostponedInstallmentCount"
                      },
                      "paybackPlanMethod": {
                        "type": "integer",
                        "format": "int32",
                        "x-aura-field-code": "paybackPlanMethod"
                      }
                    }
                  },
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-payback-plan-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/payback-plans",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<PaybackPlanDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "PaybackPlanDto",
          "collection": true,
          "members": [
            {
              "name": "PaybackPlanMethod",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "MaxPostponedInstallmentCount",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "create-loan-product-payback-plan",
        "tags": [
          "products"
        ],
        "summary": "create-loan-product-payback-plan",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "paybackPlanItems": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "maxPostponedInstallmentCount": {
                          "type": "integer",
                          "format": "int32",
                          "x-aura-field-code": "maxPostponedInstallmentCount"
                        },
                        "paybackPlanMethod": {
                          "type": "integer",
                          "format": "int32",
                          "x-aura-field-code": "paybackPlanMethod"
                        }
                      },
                      "required": [
                        "maxPostponedInstallmentCount",
                        "paybackPlanMethod"
                      ],
                      "x-aura-field-code": "productPaybackPlanItems"
                    }
                  }
                },
                "required": [
                  "paybackPlanItems"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-loan-product-payback-plan",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/payback-plans",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_33",
              "status": 400,
              "message": {
                "ar": "تم حفظ نوع خطة الاسترداد من قبل. طريقة خطة الاسترداد: {0}",
                "en": "Payback plan method type has been saved before. Payback Plan Method:{0}",
                "tr": "Geri ödeme planı yöntemi türü daha önce kaydedilmiştir. Geri Ödeme Planı Yöntemi: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_PAYBACK_PLANS_RESULT_SAME"
            }
          ]
        }
      }
    },
    "/products/{id}/payback-plans/{paybackPlanId}": {
      "delete": {
        "operationId": "delete-loan-product-payback-plan",
        "tags": [
          "products"
        ],
        "summary": "delete-loan-product-payback-plan",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "paybackPlanId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "paybackPlanId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "delete-loan-product-payback-plan",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/payback-plans/{paybackPlanId}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PaybackPlanId",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_17",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على معلومات خطة السداد. المعرف: {0}",
                "en": "Payback plan information is not found. Id: {0}",
                "tr": "Geri ödeme planı bilgisi bulunamadı. : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_PAYBACK_PLANS_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/penalties": {
      "get": {
        "operationId": "get-penalty-list",
        "tags": [
          "products"
        ],
        "summary": "get-penalty-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. An exact, uniquely bound route registration classifies this response as a collection.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-penalty-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/penalties",
        "x-aura-capabilities": {
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<PenaltyDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "PenaltyDto",
          "collection": true,
          "members": [
            {
              "name": "PenaltyType",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "PenaltyRate",
              "declared_type": "decimal?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "MinPenaltyRate",
              "declared_type": "decimal?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "MaxPenaltyRate",
              "declared_type": "decimal?",
              "nullable": true,
              "collection": false
            },
            {
              "name": "CalculationMethod",
              "declared_type": "int",
              "nullable": false,
              "collection": false
            },
            {
              "name": "IsDisposable",
              "declared_type": "bool?",
              "nullable": true,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-response-contract-disagreement": {
          "state": "catalog-union-withheld-for-exact-code-contract",
          "note": "An exact, uniquely bound route registration classifies this response as a collection.",
          "code_response_state": "structure",
          "code_cardinality": "collection",
          "catalog_cardinality": "undeclared",
          "catalog_success_status": 200
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "create-loan-product-penalty",
        "tags": [
          "products"
        ],
        "summary": "create-loan-product-penalty",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "calculationMethod": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "calculationMethod",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "penalty_method",
                      "values": [
                        {
                          "value": 1,
                          "name": "penalty_x",
                          "labels": {
                            "en": "General Penalty Calculation",
                            "tr": "Genel Ceza Hesaplama",
                            "ar": "حساب الغرامة العام"
                          }
                        },
                        {
                          "value": 2,
                          "name": "penalty_y"
                        }
                      ]
                    }
                  },
                  "isDisposable": {
                    "type": "boolean",
                    "x-aura-field-code": "isDisposable"
                  },
                  "maxPenaltyRate": {
                    "type": "number",
                    "format": "decimal",
                    "x-aura-field-code": "maxPenaltyRate"
                  },
                  "minPenaltyRate": {
                    "type": "number",
                    "format": "decimal",
                    "x-aura-field-code": "minPenaltyRate"
                  },
                  "penaltyRate": {
                    "type": "number",
                    "format": "decimal",
                    "x-aura-field-code": "penaltyRate"
                  },
                  "penaltyType": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "penaltyType",
                    "x-aura-parameter-enumeration": {
                      "state": "resolved",
                      "parameter": "penalty_type",
                      "values": [
                        {
                          "value": 1,
                          "name": "early payment penalty",
                          "labels": {
                            "en": "early payment penalty",
                            "tr": "erken ödeme cezası",
                            "ar": "غرامة الدفع المبكر"
                          }
                        },
                        {
                          "value": 2,
                          "name": "delay payment penalty",
                          "labels": {
                            "en": "delay payment penalty",
                            "tr": "geç ödeme cezası",
                            "ar": "غرامة تأخير الدفع"
                          }
                        }
                      ]
                    }
                  }
                },
                "required": [
                  "calculationMethod",
                  "isDisposable",
                  "maxPenaltyRate",
                  "minPenaltyRate",
                  "penaltyRate",
                  "penaltyType"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 6,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares this returns a single record. Of 25 operations in this state with a probeable route, 8 answered and 6 returned a single record — the other two returned a collection and a bare boolean.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "id": {
                      "type": "string",
                      "format": "uuid",
                      "x-aura-field-code": "loanProductPenaltyId"
                    }
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-loan-product-penalty",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/penalties",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PenaltyType",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "PenaltyRate",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "MinPenaltyRate",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "MaxPenaltyRate",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "CalculationMethod",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "IsDisposable",
              "declared_type": null,
              "nullable": true,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "AuraCommandDto",
          "payload": "AuraCommandDto",
          "collection": false,
          "members": [
            {
              "name": "Id",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_23",
              "status": 400,
              "message": {
                "ar": "يجب أن يكون معدل العقوبة الأدنى أقل من معدل العقوبة الأقصى.",
                "en": "Min penalty rate should be smaller than max penalty rate.",
                "tr": "Minimum ceza oranı, maksimum ceza oranından daha küçük olmalıdır."
              },
              "message_available": true,
              "constant_name": "PRODUCT_PENALTIES_MIN_MAX_RATE_CONTROL"
            },
            {
              "code": "ERR_LPRDCT_24",
              "status": 400,
              "message": {
                "ar": "يجب أن يكون معدل التخلف في النطاق بين الحد الأدنى والحد الأقصى للمعدل.",
                "en": "The default rate should be in the range of min rate to max rate.",
                "tr": "Varsayılan oran, minimum oran ile maksimum oran aralığında olmalıdır."
              },
              "message_available": true,
              "constant_name": "PRODUCT_PENALTIES_PENALTY_RATE_CONTROL"
            },
            {
              "code": "ERR_LPRDCT_31",
              "status": 400,
              "message": {
                "ar": "هناك بالفعل تعريف لهذا النوع من العقوبة على الدفع باستخدام هذه الطريقة. النوع:{0}، الطريقة:{1}",
                "en": "There is already a definition of this type and payment penalty with this method. Type:{0}, Method:{1}",
                "tr": "Bu tür bir tanım ve bu yöntemle ödeme cezası zaten var. Tipi: {0}, Yöntem: {1}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_PENALTIES_PENALTY_TYPE_AND_CALCULATION_METHOD_CONTROL"
            }
          ]
        }
      }
    },
    "/products/{id}/penalties/{penaltyId}": {
      "delete": {
        "operationId": "delete-loan-product-penalty",
        "tags": [
          "products"
        ],
        "summary": "delete-loan-product-penalty",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "penaltyId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductPenaltyId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "delete-loan-product-penalty",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/penalties/{penaltyId}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PenaltyId",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_26",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على سجل العقوبة على الدفع المبكر.",
                "en": "Early payment penalty record is not found. ",
                "tr": "Erken ödeme cezası kaydı bulunamadı."
              },
              "message_available": true,
              "constant_name": "PRODUCT_PENALTIES_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/product-tree-category-maps": {
      "post": {
        "operationId": "create-product-tree-category-map",
        "tags": [
          "products"
        ],
        "summary": "create-product-tree-category-map",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "id"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "mainProductIds": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "uuid",
                      "x-aura-field-code": "mainProductIds"
                    }
                  }
                },
                "required": [
                  "mainProductIds"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-product-tree-category-map",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/product-tree-category-maps",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_47",
              "status": 400,
              "message": null,
              "message_available": false,
              "constant_name": "SAME_PRODUCT_TREE_CATEGORY"
            }
          ]
        }
      }
    },
    "/products/{id}/special-condition": {
      "put": {
        "operationId": "update-special-condition",
        "tags": [
          "products"
        ],
        "summary": "update-special-condition",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "rate": {
                    "type": "number",
                    "format": "decimal",
                    "x-aura-field-code": "rate"
                  },
                  "referenceType": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "referenceType"
                  }
                }
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 2,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "update-special-condition",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/special-condition",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Rate",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "ReferenceType",
              "declared_type": null,
              "nullable": true,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/taxes": {
      "get": {
        "operationId": "get-product-tax-list",
        "tags": [
          "products"
        ],
        "summary": "get-product-tax-list",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "filter",
            "in": "query",
            "required": false,
            "schema": {
              "type": "object",
              "properties": {
                "code": {
                  "type": "string",
                  "x-aura-field-code": "code"
                },
                "expression": {
                  "type": "string",
                  "x-aura-field-code": "expression"
                },
                "parameters": {
                  "type": "object",
                  "x-aura-field-code": "filterParameters"
                }
              },
              "x-aura-field-code": "filter"
            }
          },
          {
            "name": "orderBy",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderBy"
            }
          },
          {
            "name": "orderSort",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "x-aura-field-code": "orderSort"
            }
          },
          {
            "name": "pageIndex",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageIndex"
            }
          },
          {
            "name": "pageSize",
            "in": "query",
            "required": false,
            "schema": {
              "type": "integer",
              "format": "int32",
              "x-aura-field-code": "pageSize"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "GET",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 5
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. Returns a collection of records. Of 135 operations in this state that were probed (measured against a reference deployment on parameterless GET routes only), 118 answered and 118 returned a bare JSON array.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "Array of catalog-declared response records.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "loanProductId"
                      },
                      "taxId": {
                        "type": "string",
                        "format": "uuid",
                        "x-aura-field-code": "taxId"
                      }
                    }
                  },
                  "x-aura-documentation": {
                    "language": "en",
                    "status": "structural-fallback",
                    "source": "catalog-structure"
                  }
                }
              }
            },
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "get-product-tax-list",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/taxes",
        "x-aura-capabilities": {
          "caching": true,
          "filtering": true,
          "ordering": true,
          "paging": true,
          "note": "Platform-provided behaviours declared on the catalog entry. The catalog does not record the parameter names the platform uses for them, so they are not rendered as parameters here."
        },
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Filter",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageIndex",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "PageSize",
              "declared_type": null,
              "nullable": true,
              "collection": false
            },
            {
              "name": "OrderBy",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "OrderSort",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "structure",
          "declared_type": "IEnumerable<TaxDto>",
          "envelopes": [
            "IEnumerable"
          ],
          "payload": "TaxDto",
          "collection": true,
          "members": [
            {
              "name": "TaxId",
              "declared_type": "Guid",
              "nullable": false,
              "collection": false
            }
          ],
          "naming": "Member names are the service's declaration names."
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      },
      "post": {
        "operationId": "create-loan-product-tax",
        "tags": [
          "products"
        ],
        "summary": "create-loan-product-tax",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "taxIds": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "x-aura-field-code": "productTaxes"
                    }
                  }
                },
                "required": [
                  "taxIds"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "POST",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 1,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "create-loan-product-tax",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/taxes",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/products/{id}/taxes/{productTaxId}": {
      "delete": {
        "operationId": "delete-loan-product-tax",
        "tags": [
          "products"
        ],
        "summary": "delete-loan-product-tax",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductId"
            }
          },
          {
            "name": "productTaxId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "productTaxId"
            }
          }
        ],
        "x-aura-request-binding": {
          "method": "DELETE",
          "admits": [
            "route",
            "query",
            "header",
            "claim"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 0,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 2,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT. The response type this route registers was read from the service's own source and is published on this operation as `x-aura-code-response`.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "delete-loan-product-tax",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "products/{id}/taxes/{productTaxId}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "ProductTaxId",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "empty-body",
          "note": "The registration passes ONE generic argument, which is the request type. There is no second argument because there is no response type to name: the constraint on that overload is `ICommand`/`IQuery`, both of which extend `IRequest<Unit>`, so the framework binds the result to `Unit` and `InvokeRequestAsync` returns before writing anything to the body.",
          "body": "empty",
          "success_status": 200,
          "derivation": "arity-1 registration; ICommand/IQuery : IRequest<Unit>, and the framework returns before writing a body"
        },
        "x-aura-error-codes": {
          "note": "Error codes this operation is known to raise, read from the handler and its validators. `message_available` says whether the error catalog carries text for a code at this ref — many are raised by code that has no seeded definition here, and for those the code itself is all the platform publishes. This is what was FOUND, not a closed list: an operation may raise a code through a path this scan does not follow.",
          "codes": [
            {
              "code": "ERR_LPRDCT_10",
              "status": 400,
              "message": {
                "ar": "المنتج غير موجود. معرف المنتج: {0}",
                "en": "Product is not found. ProductId: {0}",
                "tr": "Ürün bulunamadı. Ürün Kodu: {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_NOT_FOUND"
            },
            {
              "code": "ERR_LPRDCT_28",
              "status": 400,
              "message": {
                "ar": "لم يتم العثور على سجل تعريف الضريبة. المعرف: {0}",
                "en": "Tax definition record is not found. Id: {0}",
                "tr": "Vergi tanımı kaydı bulunamadı. : {0}"
              },
              "message_available": true,
              "constant_name": "PRODUCT_TAX_NOT_FOUND"
            }
          ]
        }
      }
    },
    "/taxes/{id}": {
      "put": {
        "operationId": "product-update-tax",
        "tags": [
          "taxes"
        ],
        "summary": "product-update-tax",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid",
              "x-aura-field-code": "loanProductTaxId"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "fromProperty": {
                    "type": "string",
                    "x-aura-field-code": "fromProperty"
                  },
                  "name": {
                    "type": "string",
                    "x-aura-field-code": "loanProductTaxName"
                  },
                  "rate": {
                    "type": "number",
                    "format": "decimal",
                    "x-aura-field-code": "rate"
                  },
                  "taxCondition": {
                    "type": "integer",
                    "format": "int32",
                    "x-aura-field-code": "taxCondition"
                  },
                  "type": {
                    "type": "string",
                    "x-aura-field-code": "type"
                  }
                },
                "required": [
                  "fromProperty",
                  "name",
                  "rate",
                  "taxCondition",
                  "type"
                ]
              }
            }
          }
        },
        "x-aura-request-binding": {
          "method": "PUT",
          "admits": [
            "route",
            "header",
            "claim",
            "body",
            "form"
          ],
          "binder_filters_by_binding_source": true,
          "declared_root_fields_by_binding_source": {
            "body": 5,
            "claim": 0,
            "form": 0,
            "header": 0,
            "path": 1,
            "query": 0
          },
          "dropped_binding_sources": [],
          "dropped_field_names": {},
          "dropped_mandatory_field_names": [],
          "verdict": "all-declared-sources-admitted",
          "basis": "Read from the platform's service-invocation layer, which selects binding sources by the contract row's usage type and operation type and then keeps only fields bound to one of them.",
          "http_edge_note": null
        },
        "responses": {
          "200": {
            "description": "Success. The catalog declares no response fields for this operation. The body is UNKNOWN CONTENT.",
            "x-aura-documentation": {
              "language": "en",
              "status": "structural-fallback",
              "source": "catalog-structure"
            }
          },
          "400": {
            "$ref": "#/components/responses/Error400",
            "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one."
          },
          "408": {
            "$ref": "#/components/responses/Error408",
            "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`."
          },
          "409": {
            "$ref": "#/components/responses/Error409",
            "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`."
          },
          "500": {
            "$ref": "#/components/responses/Error500",
            "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`."
          },
          "502": {
            "$ref": "#/components/responses/Error502",
            "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`."
          },
          "default": {
            "description": "Error.\n\n**Platform error envelope:** The platform error envelope. The status is chosen by the KIND of failure, not by the error code, so one code can arrive with different statuses and one status covers many codes. Where this operation is known to raise specific codes they are listed under `x-aura-error-codes`; that list is what was found by reading its handler and validators, not a closed set.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PlatformError"
                }
              }
            }
          }
        },
        "x-aura-service-code": "product-update-tax",
        "x-aura-domain": "product",
        "x-aura-raw-url-path": "taxes/{id}",
        "x-aura-request-contract": {
          "state": "structure",
          "note": "The fields a caller sends.",
          "members": [
            {
              "name": "Id",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Name",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "FromProperty",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "TaxCondition",
              "declared_type": null,
              "nullable": false,
              "collection": false
            },
            {
              "name": "Type",
              "declared_type": null,
              "nullable": false,
              "collection": false
            }
          ]
        },
        "x-aura-code-response": {
          "state": "no-code-endpoint",
          "note": "No endpoint registration was found at this address."
        }
      }
    }
  },
  "x-aura-collapsed-targets": {
    "note": "These operations are served by this domain but are documented under the forwarder that fronts them, because a forwarder and its target are one logical API and only the caller-facing path is an address. They are listed here so an endpoint of this service is findable from this service's document.",
    "count": 2
  },
  "components": {
    "schemas": {
      "PlatformError": {
        "type": "object",
        "title": "PlatformError",
        "description": "The body a mapped failure returns. One `error` object; `error.code` is the only place the code appears. Not every failure carries it — see the individual statuses.",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "object",
            "required": [
              "code",
              "message"
            ],
            "properties": {
              "code": {
                "type": "string",
                "description": "The platform error code. It is the identifier on the wire; a human-readable message for it is NOT guaranteed. The error catalog carries the codes seeded for this snapshot, with whichever of the published languages each one has text for, and many codes raised by services have no seeded entry at all. Where this portal knows which operations raise a code, they list it under `x-aura-error-codes`, each entry saying whether a message exists for it."
              },
              "message": {
                "type": "string",
                "description": "The resolved message for the code, in the language the request asked for."
              },
              "validationErrors": {
                "type": "array",
                "description": "Present on a validation failure only: one entry per rule that failed, each carrying its own code.",
                "items": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "businessErrors": {
                "type": "array",
                "description": "Present on a bulk failure only: one code/message pair per failed item.",
                "items": {
                  "type": "object",
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "message": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "responses": {
      "Error400": {
        "description": "Raised by: AuraValidationException, BatchException, BulkBusinessException, BusinessException, ChannelException, ChannelNotFoundException, JsonException, PartnerCodeNotFoundException, PartnerCodeNullException, PartnerException. Fixed codes for this status: ERR_AURA_30, ERR_AURA_31, ERR_AURA_32, ERR_AURA_39, ERR_AURA_4, ERR_AURA_5, VALIDATION_ERROR. Usually carries the error envelope, but 1 of the 10 failure classes mapped to this status do not — a client that always parses `error.code` must tolerate a body without one.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PlatformError"
            }
          }
        }
      },
      "Error408": {
        "description": "Raised by: AuraTimeoutException. Fixed code for this status: ERR_AURA_33. Carries the error envelope; read `error.code`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PlatformError"
            }
          }
        }
      },
      "Error409": {
        "description": "Raised by: DbUpdateConcurrencyException, IdempotencyException. Fixed codes for this status: ERR_AURA_1, ERR_AURA_3. Carries the error envelope; read `error.code`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PlatformError"
            }
          }
        }
      },
      "Error500": {
        "description": "Raised by: AuraException. Fixed code for this status: ERROR. Carries the error envelope; read `error.code`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PlatformError"
            }
          }
        }
      },
      "Error502": {
        "description": "Raised by: AuraResponseTooLargeException. Fixed code for this status: ERR_AURA_41. Carries the error envelope; read `error.code`.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/PlatformError"
            }
          }
        }
      }
    }
  }
}
