{
  "openapi": "3.0.0",
  "info": {
    "title": "Prepay Balance Management",
    "description": "## TMF API Reference: TMF654 - Prepay Balance Management\n\nThe Prepay Balance Management API enables consumers to manage the balance, recharge (top-up), transfer, reserve, unreserve, deduct and balance adjustments of a  bucket. A bucket is understood in the context of this API to be an entity that keeps track of the balance available to use services. Every bucket will measure balance in different units, it can be monetary or non-monetary (e.g. number of sms that are available, number of GB of data available, …)\n\n### Resources\n- TopupBalance\n- AdjustBalance\n- Bucket\n\n### Operations\n- Retrieve information about all the top-up operations stored in the server filtered by some criteria.\n- Perform a new top up operation (recharge)\n- Retrieve detailed information about a top-up operation previously processed by the server.\n- Retrieve the current and historic status information about a top-up operation previously processed by the server.\n- Perform a new transfer operation\n- Retrieve information about all the transfer operations stored in the server filtered by some criteria\n- Retrieve detailed information about a transfer operation previously processed by the server\n- Retrieve the current and historic status information about a transfer operation previously processed by the server.\n- Retrieve information about all the adjustments stored in the server filtered by some criteria.\n- Perform a new adjustment operation",
    "version": "5.2.26"
  },
  "tags": [
    {
      "name": "topupBalance"
    },
    {
      "name": "adjustBalance"
    },
    {
      "name": "healthCheck"
    },
    {
      "name": "bucket"
    }
  ],
  "paths": {
    "/healthz": {
      "get": {
        "operationId": "healthCheck",
        "description": "Check if application is up and running",
        "summary": "Check if application is up and running",
        "tags": [
          "healthCheck"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/HealthCheck"
                }
              }
            }
          }
        }
      }
    },
    "/bucket": {
      "get": {
        "operationId": "bucket",
        "description": "For a given logical resource (MSISDN), it retrieve a list of either service bucket/s, money bucket/s or both for prepaid accounts or offer buckets for postpaid accounts.\n",
        "summary": "Retrieve bucket details",
        "tags": [
          "bucket"
        ],
        "parameters": [
          {
            "name": "@type",
            "description": "Type of bucket",
            "required": true,
            "in": "query",
            "style": "form",
            "explode": false,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/components/schemas/BucketType"
              },
              "minItems": 1,
              "maxItems": 2
            }
          },
          {
            "name": "logicalResource.value",
            "description": "The MSISDN number",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string",
              "pattern": "^[0-9]{10}$"
            }
          },
          {
            "name": "logicalResource.@type",
            "description": "The type of the logical resource",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "MSISDN"
              ]
            }
          },
          {
            "name": "partyAccount.id",
            "description": "The Reseller Retail AccountId",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string",
              "pattern": "^[?-~ -%'-;=]{0,200}$"
            }
          },
          {
            "name": "partyAccount.@type",
            "description": "The type of the partyAccount",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "ResellerRetailBillingAccount"
              ]
            }
          },
          {
            "name": "subClassId",
            "description": "The reseller subclass Id which is required for offer buckets only.",
            "required": false,
            "in": "query",
            "schema": {
              "type": "string",
              "pattern": "^[?-~ -%'-;=]{0,200}$"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "x-amf-examples": {
                    "GetBucket_combined": {
                      "value": [
                        {
                          "id": "9992220006",
                          "href": "/bucket/9992220006?@type=ResellerMobileLineMoneyBucket",
                          "description": "bucket for monetary balance and basic subscription information",
                          "name": "Money Bucket",
                          "logicalResource": [
                            {
                              "id": "9992220006",
                              "@type": "MSISDN",
                              "value": "9992220006"
                            }
                          ],
                          "accountInformation": {
                            "accountNumber": "123456789007",
                            "market": "GAC",
                            "submarket": "706",
                            "accountType": "reseller",
                            "activationDate": "2024-03-12T00:00:00.00Z",
                            "airtimeExpirationDate": "2024-03-14T00:00:00.00Z",
                            "serviceCancelDate": "2024-05-13T00:00:00.00Z",
                            "subscriptionStatus": "available"
                          },
                          "remainingValue": {
                            "amount": 40,
                            "units": "USD"
                          },
                          "ratePlanInformation": {
                            "ratePlanCode": "TST01",
                            "ratePlanStatus": "active",
                            "ratePlanExpirationDate": "2024-03-14T00:00:00.00Z"
                          },
                          "activeFeatures": [
                            "CFC",
                            "CFI",
                            "CH",
                            "CLI",
                            "CW"
                          ],
                          "autoRenewInformation": {
                            "autoRenewStatus": "enrolled",
                            "autoRenewExecutionDate": "2024-12-04T00:00:00.00Z"
                          },
                          "@type": "ResellerMobileLineMoneyBucket"
                        },
                        {
                          "id": "ADD_INT_ROAM_VOICE_NA_30D-9992220006",
                          "href": "/bucket/ADD_INT_ROAM_VOICE_NA_30D-9992220006?@type=ResellerMobileLineServiceBucket",
                          "description": "bucket for service balance information",
                          "remainingValue": {
                            "amount": 20,
                            "units": "SECONDS"
                          },
                          "totalQuantity": {
                            "amount": 2199023254528,
                            "units": "SECONDS"
                          },
                          "name": "ADD_INT_ROAM_VOICE_NA_30D",
                          "serviceCode": "RATEPLAN_ADD_LIMITED_SERVICE",
                          "refillAmount": {
                            "amount": -1,
                            "units": "SECONDS"
                          },
                          "serviceExpirationDate": "2024-05-13T00:00:00.00Z",
                          "logicalResource": [
                            {
                              "id": "9992220006",
                              "@type": "MSISDN",
                              "value": "9992220006"
                            }
                          ],
                          "@type": "ResellerMobileLineServiceBucket"
                        }
                      ]
                    },
                    "GetBucket_offer": {
                      "value": [
                        {
                          "id": "b5639a94-fba1-46b0-94eb-b566648966dc",
                          "href": "/bucket/b5639a94-fba1-46b0-94eb-b566648966dc?@type=ResellerMobileLineOfferBucket",
                          "description": "bucket for offer balance.",
                          "offerId": "88933411",
                          "name": "20GB Data for 30 days",
                          "serviceCode": "DATA20G30D",
                          "partyAccount": {
                            "id": "41654329075",
                            "href": "/billingAccount/41654329075?@type=ResellerRetailBillingAccount",
                            "@type": "ResellerRetailBillingAccount"
                          },
                          "offerLevel": "S",
                          "remainingValue": {
                            "amount": 1043333120,
                            "units": "number"
                          },
                          "totalQuantity": {
                            "amount": 1047527424,
                            "units": "number"
                          },
                          "usedQuantity": {
                            "amount": 4194304,
                            "units": "number"
                          },
                          "chargeableAttributeUom": "K",
                          "offerEffectiveDate": "2024-05-15T00:00:00Z",
                          "offerExpiryDate": "2024-06-13T00:00:00.00Z",
                          "balanceEffectiveDate": "2024-08-15T05:00:00Z",
                          "balanceExpiryDate": "2024-09-15T05:00:00Z",
                          "logicalResource": [
                            {
                              "id": "8686232009",
                              "@type": "MSISDN",
                              "value": "8686232009"
                            }
                          ],
                          "usageType": "text",
                          "@type": "ResellerMobileLineOfferBucket"
                        },
                        {
                          "id": "b5639a94-fba1-46b0-94eb-b566648966dc",
                          "href": "/bucket/b5639a94-fba1-46b0-94eb-b566648966dc?@type=ResellerMobileLineOfferBucket",
                          "description": "bucket for offer balance.",
                          "offerId": "88933411",
                          "name": "20GB Data for 30 days",
                          "serviceCode": "DATA20G30D",
                          "partyAccount": {
                            "id": "41654329075",
                            "href": "/billingAccount/41654329075?@type=ResellerRetailBillingAccount",
                            "@type": "ResellerRetailBillingAccount"
                          },
                          "offerLevel": "G",
                          "remainingValue": {
                            "amount": 1043333120,
                            "units": "number"
                          },
                          "totalQuantity": {
                            "amount": 1047527424,
                            "units": "number"
                          },
                          "usedQuantity": {
                            "amount": 4194304,
                            "units": "number"
                          },
                          "chargeableAttributeUom": "K",
                          "offerEffectiveDate": "2024-05-15T00:00:00Z",
                          "offerExpiryDate": "2024-06-13T00:00:00.00Z",
                          "balanceEffectiveDate": "2024-08-15T05:00:00Z",
                          "balanceExpiryDate": "2024-09-15T05:00:00Z",
                          "logicalResource": [
                            {
                              "id": "8686232009",
                              "@type": "MSISDN",
                              "value": "8686232009"
                            }
                          ],
                          "usageType": "text",
                          "@type": "ResellerMobileLineOfferBucket"
                        }
                      ]
                    }
                  },
                  "type": "array",
                  "items": {
                    "oneOf": [
                      {
                        "$ref": "#/components/schemas/ServiceBucketResponse"
                      },
                      {
                        "$ref": "#/components/schemas/MoneyBucketResponse"
                      },
                      {
                        "$ref": "#/components/schemas/OfferBucketResponse"
                      }
                    ]
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ATT-Azure-AD-JWT-Token": []
          }
        ]
      }
    },
    "/topupBalance": {
      "post": {
        "operationId": "createTopupBalance",
        "description": "This operation creates a TopupBalance entity.",
        "summary": "Creates a TopupBalance",
        "parameters": [
          {
            "name": "@type",
            "description": "Type of bucket",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "ResellerMobileLinePayment"
              ]
            }
          },
          {
            "name": "Authorization",
            "description": "JWT Bearer Token. Token URL: https://login.microsoftonline.com/e741d71c-c6b6-47b0-803c-0f3b32b07556/oauth2/v2.0/token \r\n\r\n See example below.\r\n\r\n\ncurl --location --request POST 'https://login.microsoftonline.com/e741d71c-c6b6-47b0-803c-0f3b32b07556/oauth2/v2.0/token'  \r\n --header 'Content-Type: application/x-www-form-urlencoded'  \r\n --header 'Cookie: fpc=Aswi39iZZIlGtV66yM1qCANKExLGAQAAAOqRbtgOAAAA; stsservicecookie=estsfd; x-ms-gateway-slice=estsfd'  \r\n --data-urlencode 'scope=api://testHarnessCustomersStage1/.default'  \r\n --data-urlencode 'grant_type=client_credentials'  \r\n --data-urlencode 'client_id=6bb2748d-d916-4534-5148-ee8f598e1e00'  \r\n --data-urlencode 'client_secret=k_43YrZE2S2v9o6__e.KOKc_V4h__csa3M' \r\n\r\n Note: client id/secret are not the right ones - contact API provider, via 'Request Access' button to get the correct on",
            "required": true,
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Length",
            "description": "Matches the count of bytes in the request body so the server can know whether it has read the correct number of bytes.",
            "required": false,
            "in": "header",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "Accept",
            "description": "Specifies the media type as \"application/json\".",
            "required": true,
            "in": "header",
            "schema": {
              "type": "string",
              "default": "application/json"
            }
          },
          {
            "name": "X-ATT-CorrelationId",
            "description": "32 hexadecimal characters grouped as 8-4-4-4-12 and separated by four hyphens (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) for a total length of 36 characters.",
            "required": false,
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json;charset=utf-8": {
              "schema": {
                "$ref": "#/components/schemas/TopupBalance_Create"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/TopupBalanceResponse_Create"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TopupBalanceResponse_Create"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method Not allowed",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Error communicating with JWKS server.",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "ATT-Azure-AD-JWT-Token": []
          }
        ]
      }
    },
    "/topupBalance/{msisdn}": {
      "patch": {
        "operationId": "patchTopupBalance",
        "description": "This operation updates partially a TopupBalance entity.",
        "summary": "Updates partially a TopupBalance",
        "parameters": [
          {
            "name": "@type",
            "description": "Type of bucket",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "ResellerMobileLineAutoTopup"
              ]
            }
          },
          {
            "name": "msisdn",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Authorization",
            "description": "JWT Bearer Token. Token URL: https://login.microsoftonline.com/e741d71c-c6b6-47b0-803c-0f3b32b07556/oauth2/v2.0/token \r\n\r\n See example below.\r\n\r\n\ncurl --location --request POST 'https://login.microsoftonline.com/e741d71c-c6b6-47b0-803c-0f3b32b07556/oauth2/v2.0/token'  \r\n --header 'Content-Type: application/x-www-form-urlencoded'  \r\n --header 'Cookie: fpc=Aswi39iZZIlGtV66yM1qCANKExLGAQAAAOqRbtgOAAAA; stsservicecookie=estsfd; x-ms-gateway-slice=estsfd'  \r\n --data-urlencode 'scope=api://testHarnessCustomersStage1/.default'  \r\n --data-urlencode 'grant_type=client_credentials'  \r\n --data-urlencode 'client_id=6bb2748d-d916-4534-5148-ee8f598e1e00'  \r\n --data-urlencode 'client_secret=k_43YrZE2S2v9o6__e.KOKc_V4h__csa3M' \r\n\r\n Note: client id/secret are not the right ones - contact API provider, via 'Request Access' button to get the correct on",
            "required": true,
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Length",
            "description": "Matches the count of bytes in the request body so the server can know whether it has read the correct number of bytes.",
            "required": false,
            "in": "header",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "Accept",
            "description": "Specifies the media type as \"application/json\".",
            "required": true,
            "in": "header",
            "schema": {
              "type": "string",
              "default": "application/json"
            }
          },
          {
            "name": "X-ATT-CorrelationId",
            "description": "32 hexadecimal characters grouped as 8-4-4-4-12 and separated by four hyphens (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) for a total length of 36 characters.",
            "required": false,
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json;charset=utf-8": {
              "schema": {
                "x-amf-examples": {
                  "TopupBalance_Update": {
                    "airtimeexpiration": "2024-03-14T00:00:00.00Z"
                  },
                  "TopupBalance_Update_WithAutoTopup": {
                    "isAutoTopup": true,
                    "autoRenewExecutionDate": "2024-03-14T00:00:00.00Z"
                  }
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/TopupBalance_Update"
                  },
                  {
                    "$ref": "#/components/schemas/TopupBalance_Update_WithAutoTopup"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "x-amf-examples": {
                    "TopupBalanceResponse_Update": {
                      "value": {
                        "id": "0000000000000000",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "airtimeexpiration": "2024-03-14T00:00:00.00Z",
                        "@type": "ResellerMobileLineAutoTopup",
                        "status": "confirmed"
                      }
                    },
                    "TopupBalanceResponse_Update_WithAutoTopup": {
                      "value": {
                        "id": "0000000000000000",
                        "isAutoTopup": true,
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "autoRenewExecutionDate": "2024-03-14T00:00:00.00Z",
                        "@type": "ResellerMobileLineAutoTopup",
                        "status": "confirmed"
                      }
                    },
                    "TopupBalanceResponse_Update_Combined": {
                      "value": {
                        "id": "0000000000000000",
                        "isAutoTopup": true,
                        "autoRenewExecutionDate": "2024-03-14T00:00:00.00Z",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "airtimeexpiration": "2024-03-14T00:00:00.00Z",
                        "@type": "ResellerMobileLineAutoTopup",
                        "status": "confirmed"
                      }
                    }
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/TopupBalanceResponse_Update"
                    },
                    {
                      "$ref": "#/components/schemas/TopupBalanceResponse_Update_WithAutoTopup"
                    },
                    {
                      "$ref": "#/components/schemas/TopupBalanceResponse_Update_Combined"
                    }
                  ]
                }
              },
              "application/json": {
                "schema": {
                  "x-amf-examples": {
                    "TopupBalanceResponse_Update": {
                      "value": {
                        "id": "0000000000000000",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "airtimeexpiration": "2024-03-14T00:00:00.00Z",
                        "@type": "ResellerMobileLineAutoTopup",
                        "status": "confirmed"
                      }
                    },
                    "TopupBalanceResponse_Update_WithAutoTopup": {
                      "value": {
                        "id": "0000000000000000",
                        "isAutoTopup": true,
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "autoRenewExecutionDate": "2024-03-14T00:00:00.00Z",
                        "@type": "ResellerMobileLineAutoTopup",
                        "status": "confirmed"
                      }
                    },
                    "TopupBalanceResponse_Update_Combined": {
                      "value": {
                        "id": "0000000000000000",
                        "isAutoTopup": true,
                        "autoRenewExecutionDate": "2024-03-14T00:00:00.00Z",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "airtimeexpiration": "2024-03-14T00:00:00.00Z",
                        "@type": "ResellerMobileLineAutoTopup",
                        "status": "confirmed"
                      }
                    }
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/TopupBalanceResponse_Update"
                    },
                    {
                      "$ref": "#/components/schemas/TopupBalanceResponse_Update_WithAutoTopup"
                    },
                    {
                      "$ref": "#/components/schemas/TopupBalanceResponse_Update_Combined"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method Not allowed",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Error communicating with JWKS server.",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "ATT-Azure-AD-JWT-Token": []
          }
        ]
      }
    },
    "/adjustBalance": {
      "post": {
        "operationId": "createAdjustBalance",
        "description": "This operation creates a AdjustBalance entity.",
        "summary": "Creates a AdjustBalance",
        "parameters": [
          {
            "name": "Authorization",
            "description": "JWT Bearer Token. Token URL: https://login.microsoftonline.com/e741d71c-c6b6-47b0-803c-0f3b32b07556/oauth2/v2.0/token \r\n\r\n See example below.\r\n\r\n\ncurl --location --request POST 'https://login.microsoftonline.com/e741d71c-c6b6-47b0-803c-0f3b32b07556/oauth2/v2.0/token'  \r\n --header 'Content-Type: application/x-www-form-urlencoded'  \r\n --header 'Cookie: fpc=Aswi39iZZIlGtV66yM1qCANKExLGAQAAAOqRbtgOAAAA; stsservicecookie=estsfd; x-ms-gateway-slice=estsfd'  \r\n --data-urlencode 'scope=api://testHarnessCustomersStage1/.default'  \r\n --data-urlencode 'grant_type=client_credentials'  \r\n --data-urlencode 'client_id=6bb2748d-d916-4534-5148-ee8f598e1e00'  \r\n --data-urlencode 'client_secret=k_43YrZE2S2v9o6__e.KOKc_V4h__csa3M' \r\n\r\n Note: client id/secret are not the right ones - contact API provider, via 'Request Access' button to get the correct on",
            "required": true,
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "Content-Length",
            "description": "Matches the count of bytes in the request body so the server can know whether it has read the correct number of bytes.",
            "required": false,
            "in": "header",
            "schema": {
              "type": "integer",
              "default": 0
            }
          },
          {
            "name": "Accept",
            "description": "Specifies the media type as \"application/json\".",
            "required": true,
            "in": "header",
            "schema": {
              "type": "string",
              "default": "application/json"
            }
          },
          {
            "name": "X-ATT-CorrelationId",
            "description": "32 hexadecimal characters grouped as 8-4-4-4-12 and separated by four hyphens (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) for a total length of 36 characters.",
            "required": false,
            "in": "header",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json;charset=utf-8": {
              "schema": {
                "x-amf-examples": {
                  "CreateAdjustmentRequest": {
                    "value": {
                      "amount": {
                        "amount": 10,
                        "units": "USD"
                      },
                      "adjustType": "ADD",
                      "adjustmenttypecode": "960",
                      "logicalResource": {
                        "id": "9992220006",
                        "@type": "MSISDN",
                        "value": "9992220006"
                      },
                      "usageType": "monetary",
                      "@type": "ResellerMobileLineAdjustment"
                    }
                  },
                  "CreateServiceAdjustmentRequest": {
                    "value": {
                      "amount": {
                        "amount": 0,
                        "units": "number"
                      },
                      "adjustType": "SET_REFILLAMOUNT",
                      "servicetype": "DYN_DOM_VOICE",
                      "logicalResource": {
                        "id": "9992220006",
                        "@type": "MSISDN",
                        "value": "9992220006"
                      },
                      "usageType": "text",
                      "@type": "ResellerMobileLineServiceAdjustment"
                    }
                  }
                },
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/AdjustBalance_Create"
                  },
                  {
                    "$ref": "#/components/schemas/AdjustBalance_Service_Create"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "x-amf-examples": {
                    "CreateAdjustmentResponse": {
                      "value": {
                        "amount": {
                          "amount": 10,
                          "units": "USD"
                        },
                        "adjustType": "ADD",
                        "adjustmenttypecode": "960",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "usageType": "monetary",
                        "status": "confirmed",
                        "impactedBucket": [
                          {
                            "amountAfter": {
                              "amount": 40,
                              "units": "USD"
                            },
                            "item": []
                          }
                        ],
                        "@type": "ResellerMobileLineAdjustment"
                      }
                    },
                    "CreateServiceAdjustmentResponse": {
                      "value": {
                        "amount": {
                          "amount": 0,
                          "units": "number"
                        },
                        "adjustType": "SET_REFILLAMOUNT",
                        "servicetype": "DYN_DOM_VOICE",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "usageType": "text",
                        "status": "confirmed",
                        "@type": "ResellerMobileLineServiceAdjustment"
                      }
                    }
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AdjustBalance_Response"
                    },
                    {
                      "$ref": "#/components/schemas/AdjustBalance_Service_Response"
                    }
                  ]
                }
              },
              "application/json": {
                "schema": {
                  "x-amf-examples": {
                    "CreateAdjustmentResponse": {
                      "value": {
                        "amount": {
                          "amount": 10,
                          "units": "USD"
                        },
                        "adjustType": "ADD",
                        "adjustmenttypecode": "960",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "usageType": "monetary",
                        "status": "confirmed",
                        "impactedBucket": [
                          {
                            "amountAfter": {
                              "amount": 40,
                              "units": "USD"
                            },
                            "item": []
                          }
                        ],
                        "@type": "ResellerMobileLineAdjustment"
                      }
                    },
                    "CreateServiceAdjustmentResponse": {
                      "value": {
                        "amount": {
                          "amount": 0,
                          "units": "number"
                        },
                        "adjustType": "SET_REFILLAMOUNT",
                        "servicetype": "DYN_DOM_VOICE",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "usageType": "text",
                        "status": "confirmed",
                        "@type": "ResellerMobileLineServiceAdjustment"
                      }
                    }
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/AdjustBalance_Response"
                    },
                    {
                      "$ref": "#/components/schemas/AdjustBalance_Service_Response"
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "405": {
            "description": "Method Not allowed",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "Error communicating with JWKS server.",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        },
        "security": [
          {
            "ATT-Azure-AD-JWT-Token": []
          }
        ]
      }
    },
    "/adjustBalance/batch": {
      "post": {
        "parameters": [
          {
            "name": "@type",
            "required": true,
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "ResellerMobileLineServiceAdjustment"
              ]
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json;charset=utf-8": {
              "schema": {
                "example": {
                  "value": [
                    {
                      "amount": {
                        "amount": 0.7,
                        "units": "number"
                      },
                      "adjustType": "ADD",
                      "servicetype": "DYN_DOM_MMS",
                      "logicalResource": {
                        "id": "9992220006",
                        "@type": "MSISDN",
                        "value": "9992220006"
                      },
                      "usageType": "text",
                      "@type": "ResellerMobileLineServiceAdjustment"
                    },
                    {
                      "amount": {
                        "amount": 0.2,
                        "units": "number"
                      },
                      "adjustType": "SET_REFILLAMOUNT",
                      "servicetype": "DYN_DOM_SMS",
                      "logicalResource": {
                        "id": "9992220006",
                        "@type": "MSISDN",
                        "value": "9992220006"
                      },
                      "usageType": "text",
                      "@type": "ResellerMobileLineServiceAdjustment"
                    },
                    {
                      "amount": {
                        "amount": 0,
                        "units": "number"
                      },
                      "adjustType": "SET",
                      "servicetype": "DYN_DOM_VOICE",
                      "logicalResource": {
                        "id": "9992220006",
                        "@type": "MSISDN",
                        "value": "9992220006"
                      },
                      "usageType": "text",
                      "@type": "ResellerMobileLineServiceAdjustment"
                    }
                  ]
                },
                "type": "array",
                "maxItems": 20,
                "items": {
                  "$ref": "#/components/schemas/AdjustBalance_Service_Create"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "example": {
                    "value": [
                      {
                        "amount": {
                          "amount": 0.7,
                          "units": "number"
                        },
                        "adjustType": "ADD",
                        "servicetype": "DYN_DOM_MMS",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "usageType": "text",
                        "@type": "ResellerMobileLineServiceAdjustment",
                        "status": "confirmed"
                      },
                      {
                        "amount": {
                          "amount": 0.2,
                          "units": "number"
                        },
                        "adjustType": "SET_REFILLAMOUNT",
                        "servicetype": "DYN_DOM_SMS",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "usageType": "text",
                        "@type": "ResellerMobileLineServiceAdjustment",
                        "status": "confirmed"
                      },
                      {
                        "amount": {
                          "amount": 0,
                          "units": "number"
                        },
                        "adjustType": "SET",
                        "servicetype": "DYN_DOM_VOICE",
                        "logicalResource": {
                          "id": "9992220006",
                          "@type": "MSISDN",
                          "value": "9992220006"
                        },
                        "usageType": "text",
                        "@type": "ResellerMobileLineServiceAdjustment",
                        "status": "confirmed"
                      }
                    ]
                  },
                  "type": "array",
                  "maxItems": 20,
                  "items": {
                    "$ref": "#/components/schemas/AdjustBalance_Service_Response"
                  }
                }
              }
            }
          }
        },
        "security": [
          {
            "ATT-Azure-AD-JWT-Token": []
          }
        ]
      }
    }
  },
  "servers": [
    {
      "url": "https://serverRoot/api"
    }
  ],
  "components": {
    "securitySchemes": {
      "ATT-Azure-AD-JWT-Token": {
        "type": "oauth2",
        "description": "Get a JWT Token from AT&T's Azure AD",
        "x-amf-headers": {
          "Authorization": {
            "description": "JWT Bearer Token",
            "type": "string"
          }
        },
        "x-amf-responses": {
          "200": {
            "body": {
              "application/json": {
                "description": "Dummy token below. Real token is much longer with more relevant info",
                "properties": {
                  "token_type": {
                    "default": "Bearer",
                    "example": "Bearer",
                    "type": "string"
                  },
                  "expires_in": {
                    "example": 3599,
                    "type": "number",
                    "format": "int"
                  },
                  "ext_expires_in": {
                    "example": 3599,
                    "type": "number",
                    "format": "int"
                  },
                  "access_token": {
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c",
                    "type": "string"
                  }
                }
              }
            }
          },
          "400": {
            "body": {
              "application/json": {
                "description": "Only an example of 400 Error body",
                "properties": {
                  "error": {
                    "example": "unauthorized_client",
                    "type": "string"
                  },
                  "error_description": {
                    "example": "AADSTS700016: Application with identifier '6bb2748d-d916-4534-9145-ee8f598d2e01' was not found in the directory 'e741d71c-c6b6-47b0-803c-0f3b32b07556'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant.\\r\\nTrace ID: b82bea2f-5ee3-48a4-9774-4143176a6900\\r\\nCorrelation ID: b57403ef-e775-49f6-b40f-009ba759c301\\r\\nTimestamp: 2021-06-30 21:12:34Z",
                    "type": "string"
                  },
                  "error_codes": {
                    "items": {
                      "example": 700016,
                      "type": "number",
                      "format": "int"
                    }
                  },
                  "timestamp": {
                    "example": "2021-06-30 21:12:34Z",
                    "type": "string"
                  },
                  "trace_id": {
                    "example": "b82bea2f-5ee3-48a4-9774-4143176a6900",
                    "type": "string"
                  },
                  "correlation_id": {
                    "example": "b57403ef-e775-49f6-b40f-009ba759c301",
                    "type": "string"
                  },
                  "error_uri": {
                    "example": "https://login.microsoftonline.com/error?code=700016",
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "x-amf-settings": {
          "authorizationGrants": [
            "client_credentials"
          ]
        },
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://login.microsoftonline.com/e741d71c-c6b6-47b0-803c-0f3b32b07556/oauth2/v2.0/token",
            "scopes": {
              "*": ""
            }
          }
        }
      }
    },
    "schemas": {
      "HealthCheck": {
        "title": "Health Check",
        "example": {
          "application_name": "tmf654-prepayBalanceManagement",
          "message": "Application up and running",
          "time": "2023-07-14T20:10:26.843-05:00"
        },
        "type": "object",
        "required": [
          "application_name",
          "message",
          "time"
        ],
        "properties": {
          "application_name": {
            "description": "Name of the application",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "message": {
            "description": "Status of the application",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "time": {
            "description": "Date the request was received by the server",
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BucketType": {
        "description": "Valid Bucket types",
        "enum": [
          "ResellerMobileLineMoneyBucket",
          "ResellerMobileLineServiceBucket",
          "ResellerMobileLineOfferBucket"
        ],
        "type": "string"
      },
      "ServiceBucketResponse": {
        "description": "Returns array of service buckets",
        "type": "object",
        "required": [
          "id",
          "href",
          "description",
          "remainingValue",
          "totalQuantity",
          "name",
          "serviceCode",
          "refillAmount",
          "serviceExpirationDate",
          "logicalResource",
          "@type"
        ],
        "properties": {
          "id": {
            "description": "unique identifier",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "href": {
            "description": "Hyperlink reference",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "description": {
            "description": "description of the related entity.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "remainingValue": {
            "$ref": "#/components/schemas/type"
          },
          "totalQuantity": {
            "$ref": "#/components/schemas/type_1"
          },
          "name": {
            "description": "Name of the related entity.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "serviceCode": {
            "description": "service code.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "refillAmount": {
            "$ref": "#/components/schemas/type_2"
          },
          "serviceExpirationDate": {
            "description": "service Expiration Date.",
            "type": "string",
            "format": "date-time"
          },
          "logicalResource": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/items"
            }
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "ResellerMobileLineServiceBucket"
            },
            "type": "string",
            "pattern": "^ResellerMobileLineServiceBucket$"
          }
        }
      },
      "MoneyBucketResponse": {
        "description": "Returns single money bucket with account, rateplan, and autorenew details",
        "type": "object",
        "required": [
          "id",
          "href",
          "description",
          "name",
          "logicalResource",
          "accountInformation",
          "remainingValue",
          "ratePlanInformation",
          "activeFeatures",
          "autoRenewInformation",
          "@type"
        ],
        "properties": {
          "id": {
            "description": "unique identifier",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "href": {
            "description": "Hyperlink reference",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "description": {
            "description": "description of the related entity.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "name": {
            "description": "Name of the related entity.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "logicalResource": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/items"
            }
          },
          "accountInformation": {
            "$ref": "#/components/schemas/type_3"
          },
          "remainingValue": {
            "$ref": "#/components/schemas/type"
          },
          "ratePlanInformation": {
            "$ref": "#/components/schemas/type_4"
          },
          "activeFeatures": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string"
            }
          },
          "autoRenewInformation": {
            "$ref": "#/components/schemas/type_5"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "ResellerMobileLineMoneyBucket"
            },
            "type": "string",
            "pattern": "^ResellerMobileLineMoneyBucket$"
          }
        }
      },
      "OfferBucketResponse": {
        "description": "Returns array of service buckets",
        "type": "object",
        "required": [
          "id",
          "href",
          "description",
          "offerId",
          "name",
          "serviceCode",
          "offerLevel",
          "remainingValue",
          "totalQuantity",
          "usedQuantity",
          "chargeableAttributeUom",
          "offerEffectiveDate",
          "offerExpiryDate",
          "balanceEffectiveDate",
          "balanceExpiryDate",
          "logicalResource",
          "usageType",
          "@type"
        ],
        "properties": {
          "id": {
            "description": "unique identifier for the subscription",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "href": {
            "description": "Hyperlink reference",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "description": {
            "description": "description of the related entity.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "offerId": {
            "description": "id of the offer.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "name": {
            "description": "Name of the offer.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "serviceCode": {
            "description": "code of the offer.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "partyAccount": {
            "$ref": "#/components/schemas/type_6"
          },
          "offerLevel": {
            "description": "subscriber level or group level subscription.",
            "type": "string",
            "pattern": "^[SG]$"
          },
          "remainingValue": {
            "$ref": "#/components/schemas/amount"
          },
          "totalQuantity": {
            "$ref": "#/components/schemas/amount"
          },
          "usedQuantity": {
            "$ref": "#/components/schemas/amount"
          },
          "chargeableAttributeUom": {
            "description": "unit of measure for subscription usage",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "offerEffectiveDate": {
            "description": "effectiveDate of offer",
            "type": "string",
            "format": "date-time"
          },
          "offerExpiryDate": {
            "description": "expiryDate of offer",
            "type": "string",
            "format": "date-time"
          },
          "balanceEffectiveDate": {
            "description": "effectiveDate of balance",
            "type": "string",
            "format": "date-time"
          },
          "balanceExpiryDate": {
            "description": "expiryDate of balance",
            "type": "string",
            "format": "date-time"
          },
          "logicalResource": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/items"
            }
          },
          "usageType": {
            "description": "usage type defined by TMF for number units. see chargeableAttributeUom instead",
            "enum": [
              "text"
            ],
            "type": "string"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "ResellerMobileLineOfferBucket"
            },
            "type": "string",
            "pattern": "^ResellerMobileLineOfferBucket$"
          }
        }
      },
      "TopupBalance_Create": {
        "description": "A Payment request adds money to the subscriber’s main account or subscriber’s bucket and MAY extend the subscriber’s airtime expiration date. TPSP Payment must be used to activate the subscriber’s lifecycle.",
        "example": {
          "value": {
            "amount": {
              "amount": 1,
              "units": "USD"
            },
            "paymentTypeCode": "790",
            "logicalResource": {
              "@type": "MSISDN",
              "value": "9992220006"
            },
            "usageType": "monetary",
            "@type": "ResellerMobileLinePayment"
          }
        },
        "type": "object",
        "required": [
          "amount",
          "paymentTypeCode",
          "logicalResource",
          "usageType",
          "@type"
        ],
        "properties": {
          "amount": {
            "$ref": "#/components/schemas/type_7"
          },
          "paymentTypeCode": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "logicalResource": {
            "$ref": "#/components/schemas/type_8"
          },
          "usageType": {
            "description": "",
            "example": {
              "strict": true,
              "value": "monetary"
            },
            "type": "string",
            "pattern": "^monetary$"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "ResellerMobileLinePayment"
            },
            "type": "string",
            "pattern": "^ResellerMobileLinePayment$"
          }
        }
      },
      "TopupBalanceResponse_Create": {
        "description": "A Payment request adds money to the subscriber's main account or subscriber's bucket and MAY extend the subscriber's airtime expiration date. TPSP Payment must be used to activate the subscriber's lifecycle.",
        "example": {
          "value": {
            "amount": {
              "amount": 1,
              "units": "USD"
            },
            "paymentTypeCode": "790",
            "logicalResource": {
              "id": "9992220006",
              "@type": "MSISDN",
              "value": "9992220006"
            },
            "usageType": "monetary",
            "status": "confirmed",
            "impactedBucket": [
              {
                "name": "servicebalancechangeinfo",
                "amountAfter": {
                  "amount": 30,
                  "units": "days"
                }
              },
              {
                "name": "moneybalanceinfo",
                "airtimeExpirationDate": "2024-04-12T00:00:00.00Z",
                "amountAfter": {
                  "amount": 40,
                  "units": "USD"
                }
              }
            ],
            "@type": "ResellerMobileLinePayment"
          }
        },
        "type": "object",
        "required": [
          "amount",
          "paymentTypeCode",
          "logicalResource",
          "usageType",
          "status",
          "impactedBucket",
          "@type"
        ],
        "properties": {
          "amount": {
            "description": "Quantity is the subscriber's account balance in United States cents after the payment.",
            "type": "object",
            "required": [
              "units",
              "amount"
            ],
            "properties": {
              "units": {
                "enum": [
                  "USD"
                ],
                "type": "string"
              },
              "amount": {
                "type": "number"
              }
            }
          },
          "paymentTypeCode": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "logicalResource": {
            "$ref": "#/components/schemas/type_8"
          },
          "usageType": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "status": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "impactedBucket": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/items_9"
            }
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "ResellerMobileLinePayment"
            },
            "type": "string",
            "pattern": "^ResellerMobileLinePayment$"
          }
        }
      },
      "Error": {
        "description": "Used when an API throws an Error, typically with a HTTP error response-code (3xx, 4xx, 5xx)",
        "x-amf-examples": {
          "example_2": {
            "code": "405",
            "reason": "Method Not Allowed",
            "message": "This is an example error response for 405 Method Not Allowed",
            "status": "405-METHOD_NOT_ALLOWED-TMF654",
            "referenceError": "405-METHOD_NOT_ALLOWED-TMF654",
            "@baseType": "Error",
            "@schemaLocation": "../../traits/Error.raml"
          },
          "amf_example_1": {
            "code": "409",
            "reason": "Conflict",
            "message": "This is an example error response for 409 Conflict",
            "status": "409-CONFLICT-TMF654",
            "referenceError": "409-CONFLICT-TMF654",
            "@baseType": "Error",
            "@schemaLocation": "../../traits/Error.raml"
          },
          "example_1": {
            "code": "401",
            "reason": "Invalid Token",
            "message": "This is an example error response for 401 Unauthorized",
            "status": "401-UNAUTHORIZED-TMF654",
            "referenceError": "401-UNAUTHORIZED-TMF654",
            "@baseType": "Error",
            "@schemaLocation": "../../traits/Error.raml"
          },
          "amf_example_2": {
            "code": "403",
            "reason": "Forbidden",
            "message": "This is an example error response for 403 Forbidden",
            "status": "403-FORBIDDEN-TMF654",
            "referenceError": "403-FORBIDDEN-TMF654",
            "@baseType": "Error",
            "@schemaLocation": "../../traits/Error.raml"
          },
          "amf_example_4": {
            "code": "500",
            "reason": "Internal Server Error",
            "message": "This is an example error response for 500 Internal Server Error",
            "status": "500-INTERNAL_SERVER_ERROR-TMF654",
            "referenceError": "500-INTERNAL_SERVER_ERROR-TMF654",
            "@baseType": "Error",
            "@schemaLocation": "../../traits/Error.raml"
          },
          "example_0": {
            "code": "400",
            "reason": "Bad Request",
            "message": "This is an example error response for 400 Bad Request",
            "status": "400-BAD_REQUEST-TMF654",
            "referenceError": "400-BAD_REQUEST-TMF654",
            "@baseType": "Error",
            "@schemaLocation": "../../traits/Error.raml"
          },
          "amf_example_3": {
            "code": "404",
            "reason": "Not Found",
            "message": "This is an example error response for 404 Not Found",
            "status": "404-NOT_FOUND-TMF654",
            "referenceError": "404-NOT_FOUND-TMF654",
            "@baseType": "Error",
            "@schemaLocation": "../../traits/Error.raml"
          },
          "example_3": {
            "code": "503",
            "reason": "Error communicating with JWKS server.",
            "message": "This is an example error response for 503 Service Not Available",
            "status": "503-SERVICE_NOT_AVAILABLE-TMF654",
            "referenceError": "503-SERVICE_NOT_AVAILABLE-TMF654",
            "@baseType": "Error",
            "@schemaLocation": "../../traits/Error.raml"
          }
        },
        "type": "object",
        "required": [
          "code",
          "reason"
        ],
        "properties": {
          "code": {
            "description": "Application relevant detail, defined in the API or a common list.",
            "type": "string"
          },
          "reason": {
            "description": "Explanation of the reason for the error which can be shown to a client user.",
            "type": "string"
          },
          "message": {
            "description": "More details and corrective actions related to the error which can be shown to a client user.",
            "type": "string"
          },
          "status": {
            "description": "HTTP Error code extension",
            "type": "string"
          },
          "referenceError": {
            "description": "URI of documentation describing the error.",
            "type": "string"
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class.",
            "type": "string"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "type": "string"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class entity name.",
            "type": "string"
          }
        }
      },
      "TopupBalance_Update": {
        "type": "object",
        "required": [
          "airtimeexpiration"
        ],
        "properties": {
          "airtimeexpiration": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TopupBalance_Update_WithAutoTopup": {
        "description": "Represents a detailed description of a recharge operation requested over a bucket (defined by a specific product or reference to a product (i.e.: a commercial id such as an msisidn) and a service type)\nSkipped properties: id,href",
        "type": "object",
        "required": [
          "isAutoTopup",
          "autoRenewExecutionDate"
        ],
        "properties": {
          "isAutoTopup": {
            "type": "boolean"
          },
          "autoRenewExecutionDate": {
            "description": "Description of the recharge operation",
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "TopupBalanceResponse_Update": {
        "type": "object",
        "required": [
          "id",
          "logicalResource",
          "airtimeexpiration",
          "@type",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "logicalResource": {
            "$ref": "#/components/schemas/type_10"
          },
          "airtimeexpiration": {
            "type": "string",
            "format": "date-time"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "ResellerMobileLineAutoTopup"
            },
            "type": "string",
            "pattern": "^ResellerMobileLineAutoTopup$"
          },
          "status": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "TopupBalanceResponse_Update_WithAutoTopup": {
        "description": "TPSP Change Auto Renew request is used to enroll or de-enroll subscribers in the auto renew feature.  It's recommendable to de-enroll the subscriber from Auto Renew prior to a change rate plan, then enroll the subscriber after the rate plan change and the corresponding payment is done. Consider that there will be a lag between Payment and the rate plan being active. Under normal conditions, it will take less than a second for the rate plan to become active and all services provisioned after a payment. Under extreme load it can be longer, hence, the recommendation is to wait 2 seconds before sending the Change Auto Renew request",
        "type": "object",
        "required": [
          "id",
          "isAutoTopup",
          "logicalResource",
          "autoRenewExecutionDate",
          "@type",
          "status"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "isAutoTopup": {
            "type": "boolean"
          },
          "logicalResource": {
            "$ref": "#/components/schemas/type_8"
          },
          "autoRenewExecutionDate": {
            "type": "string",
            "format": "date-time"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "ResellerMobileLineAutoTopup"
            },
            "type": "string",
            "pattern": "^ResellerMobileLineAutoTopup$"
          },
          "status": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "TopupBalanceResponse_Update_Combined": {
        "description": "TPSP Change Auto Renew request is used to enroll or de-enroll subscribers in the auto renew feature.  It's recommendable to de-enroll the subscriber from Auto Renew prior to a change rate plan, then enroll the subscriber after the rate plan change and the corresponding payment is done. Consider that there will be a lag between Payment and the rate plan being active. Under normal conditions, it will take less than a second for the rate plan to become active and all services provisioned after a payment. Under extreme load it can be longer, hence, the recommendation is to wait 2 seconds before sending the Change Auto Renew request",
        "type": "object",
        "required": [
          "autoRenewExecutionDate",
          "airtimeexpiration",
          "id",
          "logicalResource",
          "@type",
          "isAutoTopup",
          "status"
        ],
        "properties": {
          "autoRenewExecutionDate": {
            "type": "string",
            "format": "date-time"
          },
          "airtimeexpiration": {
            "type": "string",
            "format": "date-time"
          },
          "id": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "logicalResource": {
            "$ref": "#/components/schemas/type_10"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "ResellerMobileLineAutoTopup"
            },
            "type": "string",
            "pattern": "^ResellerMobileLineAutoTopup$"
          },
          "isAutoTopup": {
            "type": "boolean"
          },
          "status": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "AdjustBalance_Create": {
        "description": "An Adjustment request either credits or debits a subscriber’s main account balance.",
        "type": "object",
        "required": [
          "adjustType",
          "usageType",
          "amount",
          "logicalResource",
          "@type",
          "adjustmenttypecode"
        ],
        "properties": {
          "adjustType": {
            "enum": [
              "ADD",
              "SUBTRACT"
            ],
            "type": "string"
          },
          "usageType": {
            "enum": [
              "monetary"
            ],
            "type": "string"
          },
          "amount": {
            "$ref": "#/components/schemas/type_11"
          },
          "logicalResource": {
            "$ref": "#/components/schemas/items_12"
          },
          "@type": {
            "enum": [
              "ResellerMobileLineAdjustment"
            ],
            "type": "string"
          },
          "adjustmenttypecode": {
            "type": "string"
          }
        }
      },
      "AdjustBalance_Service_Create": {
        "description": "An Update Service Package request is used to increase, decrease, or set the service balances of Service Based and Flexible Refill rate plans. It is also used to set the Dynamic Tier service refill amounts for Flexible Refill rate plans.",
        "type": "object",
        "required": [
          "adjustType",
          "usageType",
          "servicetype",
          "amount",
          "logicalResource",
          "@type"
        ],
        "properties": {
          "adjustType": {
            "enum": [
              "ADD",
              "SUBTRACT",
              "SET",
              "SET_REFILLAMOUNT"
            ],
            "type": "string"
          },
          "usageType": {
            "enum": [
              "text"
            ],
            "type": "string"
          },
          "servicetype": {
            "description": "The serviceType values are unique for each MVNO and are documented during the onboarding process.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "amount": {
            "$ref": "#/components/schemas/type_13"
          },
          "logicalResource": {
            "$ref": "#/components/schemas/items_12"
          },
          "@type": {
            "enum": [
              "ResellerMobileLineServiceAdjustment"
            ],
            "type": "string"
          }
        }
      },
      "AdjustBalance_Response": {
        "description": "An Adjustment request either credits or debits a subscriber’s main account balance.",
        "type": "object",
        "required": [
          "adjustType",
          "usageType",
          "logicalResource",
          "amount",
          "impactedBucket",
          "@type",
          "adjustmenttypecode",
          "status"
        ],
        "properties": {
          "adjustType": {
            "enum": [
              "ADD",
              "SUBTRACT"
            ],
            "type": "string"
          },
          "usageType": {
            "enum": [
              "monetary"
            ],
            "type": "string"
          },
          "logicalResource": {
            "$ref": "#/components/schemas/items_12"
          },
          "amount": {
            "$ref": "#/components/schemas/type_11"
          },
          "impactedBucket": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/items_14"
            }
          },
          "@type": {
            "enum": [
              "ResellerMobileLineAdjustment"
            ],
            "type": "string"
          },
          "adjustmenttypecode": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "AdjustBalance_Service_Response": {
        "description": "An Update Service Package request is used to increase, decrease, or set the service balances of Service Based and Flexible Refill rate plans. It is also used to set the Dynamic Tier service refill amounts for Flexible Refill rate plans.",
        "type": "object",
        "required": [
          "adjustType",
          "usageType",
          "servicetype",
          "logicalResource",
          "amount",
          "@type",
          "status"
        ],
        "properties": {
          "adjustType": {
            "enum": [
              "ADD",
              "SUBTRACT",
              "SET",
              "SET_REFILLAMOUNT"
            ],
            "type": "string"
          },
          "usageType": {
            "enum": [
              "text"
            ],
            "type": "string"
          },
          "servicetype": {
            "description": "The serviceType values are unique for each MVNO and are documented during the onboarding process.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "logicalResource": {
            "$ref": "#/components/schemas/items_12"
          },
          "amount": {
            "$ref": "#/components/schemas/type_13"
          },
          "@type": {
            "enum": [
              "ResellerMobileLineServiceAdjustment"
            ],
            "type": "string"
          },
          "status": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "type": {
        "description": "RemainingValue",
        "type": "object",
        "required": [
          "amount",
          "units"
        ],
        "properties": {
          "amount": {
            "type": "number"
          },
          "units": {
            "type": "string"
          }
        }
      },
      "type_1": {
        "description": "TotalQuantity",
        "type": "object",
        "required": [
          "amount",
          "units"
        ],
        "properties": {
          "amount": {
            "type": "number"
          },
          "units": {
            "type": "string"
          }
        }
      },
      "type_2": {
        "description": "RefillAmount",
        "type": "object",
        "required": [
          "amount",
          "units"
        ],
        "properties": {
          "amount": {
            "type": "number"
          },
          "units": {
            "type": "string"
          }
        }
      },
      "items": {
        "description": "MSISDN is the mobile number of the subscriber.",
        "type": "object",
        "required": [
          "@type",
          "value"
        ],
        "properties": {
          "id": {
            "description": "unique identifier",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "MSISDN"
            },
            "type": "string",
            "pattern": "^MSISDN$"
          },
          "value": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "type_3": {
        "description": "AccountInformation",
        "type": "object",
        "required": [
          "accountNumber",
          "market",
          "submarket",
          "accountType",
          "activationDate",
          "airtimeExpirationDate",
          "serviceCancelDate",
          "subscriptionStatus"
        ],
        "properties": {
          "accountNumber": {
            "type": "string"
          },
          "market": {
            "type": "string"
          },
          "submarket": {
            "type": "string"
          },
          "accountType": {
            "type": "string"
          },
          "activationDate": {
            "type": "string",
            "format": "date-time"
          },
          "airtimeExpirationDate": {
            "type": "string",
            "format": "date-time"
          },
          "serviceCancelDate": {
            "type": "string",
            "format": "date-time"
          },
          "subscriptionStatus": {
            "type": "string"
          }
        }
      },
      "type_4": {
        "description": "RatePlanInformation",
        "type": "object",
        "required": [
          "ratePlanCode",
          "ratePlanStatus",
          "ratePlanExpirationDate"
        ],
        "properties": {
          "ratePlanCode": {
            "type": "string"
          },
          "ratePlanStatus": {
            "type": "string"
          },
          "ratePlanExpirationDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "type_5": {
        "description": "AutoRenewInformation",
        "type": "object",
        "required": [
          "autoRenewStatus",
          "autoRenewExecutionDate"
        ],
        "properties": {
          "autoRenewStatus": {
            "type": "string"
          },
          "autoRenewExecutionDate": {
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "type_6": {
        "description": "ResellerRetailBillingAccountId of the group subscription.",
        "type": "object",
        "required": [
          "href",
          "@type"
        ],
        "properties": {
          "id": {
            "description": "unique identifier",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "href": {
            "description": "Hyperlink reference",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "ResellerRetailBillingAccount"
            },
            "type": "string",
            "pattern": "^ResellerRetailBillingAccount$"
          }
        }
      },
      "amount": {
        "description": "An amount in a given unit",
        "type": "object",
        "properties": {
          "amount": {
            "description": "Numeric value in a given unit",
            "default": 1,
            "type": "number",
            "format": "double"
          },
          "units": {
            "description": "Unit",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "type_7": {
        "type": "object",
        "required": [
          "amount",
          "units"
        ],
        "properties": {
          "amount": {
            "type": "number"
          },
          "units": {
            "enum": [
              "USD"
            ],
            "type": "string"
          }
        }
      },
      "type_8": {
        "description": "MSISDN is the mobile number of the subscriber.",
        "type": "object",
        "required": [
          "@type",
          "value"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "MSISDN"
            },
            "type": "string",
            "pattern": "^MSISDN$"
          },
          "value": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "items_9": {
        "type": "object",
        "required": [
          "name",
          "amountAfter"
        ],
        "properties": {
          "name": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "amountAfter": {
            "$ref": "#/components/schemas/type_15"
          }
        }
      },
      "type_10": {
        "description": "MSISDN is the mobile number of the subscriber.",
        "type": "object",
        "required": [
          "@type",
          "value"
        ],
        "properties": {
          "id": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "MSISDN"
            },
            "type": "string",
            "pattern": "^MSISDN$"
          },
          "value": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        },
        "allOf": [
          {
            "$ref": "#/components/schemas/type_8"
          }
        ]
      },
      "type_11": {
        "description": "An amount in a given unit",
        "type": "object",
        "properties": {
          "amount": {
            "description": "Numeric value in a given unit",
            "default": 1,
            "type": "number",
            "format": "double"
          },
          "units": {
            "description": "Unit",
            "enum": [
              "USD"
            ],
            "type": "string"
          }
        }
      },
      "items_12": {
        "description": "MSISDN is the mobile number of the subscriber.",
        "type": "object",
        "required": [
          "value",
          "@type"
        ],
        "properties": {
          "href": {
            "description": "Hyperlink reference",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "example": {
              "strict": false,
              "value": "https://mycsp.com:8080/tmf-api/schema/Resource/LogicalResourceSpecification.schema.json"
            },
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "name": {
            "description": "Name of the related entity.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "id": {
            "description": "unique identifier",
            "type": "string",
            "pattern": "^[0-9]{10}$"
          },
          "value": {
            "type": "string",
            "pattern": "^[0-9]{10}$"
          },
          "@type": {
            "example": {
              "strict": true,
              "value": "MSISDN"
            },
            "type": "string",
            "pattern": "^MSISDN$"
          },
          "@referredType": {
            "description": "The actual type of the target instance when needed for disambiguation.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@baseType": {
            "example": "LogicalResourceRef",
            "type": "string",
            "pattern": "^LogicalResourceRef$"
          }
        }
      },
      "type_13": {
        "description": "An amount in a given unit",
        "type": "object",
        "properties": {
          "amount": {
            "description": "Numeric value in a given unit",
            "default": 1,
            "type": "number",
            "format": "double"
          },
          "units": {
            "description": "Unit",
            "enum": [
              "number"
            ],
            "type": "string"
          }
        }
      },
      "items_14": {
        "description": "A resource that references other buckets that have been impacted by the action of type TopupBalance,AdjustBalance,TransferBalance or ReserveBalance.",
        "type": "object",
        "properties": {
          "bucket": {
            "description": "A reference to the bucket impacted by the request or the value itself.",
            "type": "object",
            "required": [
              "id"
            ],
            "properties": {
              "href": {
                "description": "Hyperlink reference",
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              },
              "@schemaLocation": {
                "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
                "example": {
                  "strict": false,
                  "value": "https://mycsp.com:8080/tmf-api/schema/Resource/LogicalResourceSpecification.schema.json"
                },
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              },
              "name": {
                "description": "Name of the related entity.",
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              },
              "id": {
                "description": "unique identifier",
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              },
              "@type": {
                "description": "When sub-classing, this defines the sub-class Extensible name",
                "example": {
                  "strict": false,
                  "value": "LogicalResourceSpecification"
                },
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              },
              "@referredType": {
                "description": "The actual type of the target instance when needed for disambiguation.",
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              },
              "@baseType": {
                "description": "When sub-classing, this defines the super-class",
                "example": {
                  "strict": false,
                  "value": "ResourceSpecification"
                },
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              }
            }
          },
          "description": {
            "description": "Text describing the contents of the balance managed by the bucket.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "name": {
            "description": "Friendly name to identify the bucket.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class",
            "example": {
              "strict": false,
              "value": "ResourceSpecification"
            },
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "example": {
              "strict": false,
              "value": "https://mycsp.com:8080/tmf-api/schema/Resource/LogicalResourceSpecification.schema.json"
            },
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class Extensible name",
            "example": {
              "strict": false,
              "value": "LogicalResourceSpecification"
            },
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "amountAfter": {
            "description": "Indicates the amount after on the impacted bucket after the action has completed.",
            "type": "object",
            "properties": {
              "units": {
                "description": "Unit",
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              },
              "amount": {
                "description": "Numeric value in a given unit",
                "default": 1,
                "type": "number",
                "format": "double"
              }
            }
          },
          "amountBefore": {
            "description": "Indicates the amount remaining on the impacted bucket.",
            "type": "object",
            "properties": {
              "units": {
                "description": "Unit",
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              },
              "amount": {
                "description": "Numeric value in a given unit",
                "default": 1,
                "type": "number",
                "format": "double"
              }
            }
          },
          "requestedDate": {
            "description": "Date when the deduction request was received in the server",
            "type": "string",
            "format": "date-time"
          },
          "confirmationDate": {
            "description": "Date when the deduction was confirmed in the server",
            "type": "string",
            "format": "date-time"
          },
          "item": {
            "description": "A list of impacted bucket items (ImpactedBucketItem [1..*]). a resource used by the ImpactedBucket resource to capture the impact of an ImpactedBucket.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/items_16"
            }
          }
        }
      },
      "type_15": {
        "type": "object",
        "required": [
          "amount",
          "units"
        ],
        "properties": {
          "amount": {
            "type": "number"
          },
          "units": {
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "items_16": {
        "description": "A resource used by the ImpactedBucket resource to capture the impact of an ImpactedBucket.",
        "type": "object",
        "properties": {
          "description": {
            "description": "Description of the recharge operation.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "name": {
            "description": "This represents the transaction activity. e.g. topup, bonus, additional bonus, tax, fees, and so on.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "reason": {
            "description": "Text describing the reason for the action/task.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "itemType": {
            "description": "This indicates whether the action led to the bucket being incremented or decremented.eg credit or debit.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class",
            "example": {
              "strict": false,
              "value": "ResourceSpecification"
            },
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "example": {
              "strict": false,
              "value": "https://mycsp.com:8080/tmf-api/schema/Resource/LogicalResourceSpecification.schema.json"
            },
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class Extensible name",
            "example": {
              "strict": false,
              "value": "LogicalResourceSpecification"
            },
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "amount": {
            "description": "Indicate the amount on the bucket.",
            "type": "object",
            "properties": {
              "units": {
                "description": "Unit",
                "type": "string",
                "pattern": "^[?-~ -%'-;=]{0,200}$"
              },
              "amount": {
                "description": "Numeric value in a given unit",
                "default": 1,
                "type": "number",
                "format": "double"
              }
            }
          }
        }
      }
    }
  }
}