{
  "openapi": "3.0.0",
  "info": {
    "title": "bunny.net Partner Portal API",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://api.bunny.net",
      "description": "bunny.net API Server"
    }
  ],
  "security": [
    {
      "AccessKey": []
    }
  ],
  "paths": {
    "/partner/customers": {
      "post": {
        "tags": [
          "Customers"
        ],
        "summary": "Create Customer",
        "description": "Create a new customer under the authenticated partner and email them a set-password welcome link.",
        "operationId": "CreatePartnerCustomerEndpoint_CreateCustomer",
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreatePartnerCustomerRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Customer created and welcome email sent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreatePartnerCustomerResponse"
                }
              }
            }
          },
          "400": {
            "description": "Missing or invalid email address, or the welcome email could not be sent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorData"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated user is not a reseller or MSP partner."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "List Customers",
        "description": "List the authenticated partner's assigned customers, newest assignment first.",
        "operationId": "ListPartnerCustomersEndpoint_ListCustomers",
        "responses": {
          "200": {
            "description": "All customers assigned to this partner.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PartnerCustomerListItemModel"
                  }
                }
              }
            }
          },
          "401": {
            "description": "The request authorization failed."
          },
          "403": {
            "description": "Authenticated user is not a reseller or MSP partner."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/customer/{customerUserId}/audit/{date}": {
      "get": {
        "tags": [
          "Audit Log"
        ],
        "summary": "Get Audit Log",
        "description": "Get the audit log for one of the partner's customers. ResourceOwner identifies the customer each entry belongs to.",
        "operationId": "GetPartnerAuditLogEndpoint_GetPartnerAuditLog",
        "parameters": [
          {
            "name": "customerUserId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "date",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "x-position": 2
          },
          {
            "name": "Product",
            "in": "query",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "string"
              }
            },
            "x-position": 3
          },
          {
            "name": "ResourceType",
            "in": "query",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "string"
              }
            },
            "x-position": 4
          },
          {
            "name": "ResourceId",
            "in": "query",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "string"
              }
            },
            "x-position": 5
          },
          {
            "name": "ActorId",
            "in": "query",
            "style": "form",
            "explode": true,
            "schema": {
              "type": "array",
              "nullable": true,
              "items": {
                "type": "string"
              }
            },
            "x-position": 6
          },
          {
            "name": "Order",
            "in": "query",
            "schema": {
              "$ref": "#/components/schemas/LogOrdering"
            },
            "x-position": 7
          },
          {
            "name": "ContinuationToken",
            "in": "query",
            "schema": {
              "type": "string",
              "nullable": true
            },
            "x-position": 8
          },
          {
            "name": "Limit",
            "in": "query",
            "schema": {
              "type": "integer",
              "format": "int32",
              "maximum": 10000.0,
              "minimum": 1.0
            },
            "x-position": 9
          }
        ],
        "responses": {
          "200": {
            "description": "The list of audit log entries.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetUserAuditLogResponse"
                }
              }
            }
          },
          "400": {
            "description": "The request was invalid.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorData"
                }
              }
            }
          },
          "401": {
            "description": "The request authorization failed."
          },
          "403": {
            "description": "Authenticated user is not a reseller or MSP partner, or the customer is not assigned to this partner."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/contract": {
      "get": {
        "tags": [
          "Contract"
        ],
        "summary": "Get Contract",
        "description": "Get the contract details for the authenticated partner.",
        "operationId": "GetPartnerContractEndpoint_GetContract",
        "responses": {
          "200": {
            "description": "Partner contract details.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerCustomerContractModel"
                }
              }
            }
          },
          "404": {
            "description": "The partner has no contract configured."
          },
          "401": {
            "description": "The request authorization failed."
          },
          "403": {
            "description": "The authenticated user is not a reseller or MSP partner."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/customer/{customerUserId}/billing": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Get Customer Billing",
        "description": "Get a billing summary for the customer's account, including invoice history.",
        "operationId": "GetPartnerCustomerBillingEndpoint_GetBilling",
        "parameters": [
          {
            "name": "customerUserId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Billing view.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingModel"
                }
              }
            }
          },
          "403": {
            "description": "Customer is not assigned to this partner."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/customer/{customerUserId}/billing/{billingRecordId}/pdf": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Download Invoice PDF",
        "description": "Download the customer's invoice PDF for an existing billing record.",
        "operationId": "GetPartnerCustomerBillingPdfEndpoint_GetBillingPdf",
        "parameters": [
          {
            "name": "customerUserId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "billingRecordId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "format": "int64"
            },
            "x-position": 2
          }
        ],
        "responses": {
          "200": {
            "description": "Invoice PDF stream."
          },
          "403": {
            "description": "Customer is not assigned to this partner."
          },
          "404": {
            "description": "Invoice not found."
          },
          "503": {
            "description": "PDF generation failed."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/customer/{customerUserId}": {
      "get": {
        "tags": [
          "Customers"
        ],
        "summary": "Get Customer Overview",
        "description": "Get an overview of a customer: monthly usage snapshot, bandwidth trend, contract, and product summaries.",
        "operationId": "GetPartnerCustomerOverviewEndpoint_GetOverview",
        "parameters": [
          {
            "name": "customerUserId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Overview payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerCustomerOverviewModel"
                }
              }
            }
          },
          "401": {
            "description": "The request authorization failed."
          },
          "403": {
            "description": "Customer is not assigned to this partner."
          },
          "404": {
            "description": "Customer user account no longer exists."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/customer/{customerUserId}/pricing": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Get Customer Pricing",
        "description": "Get the full pricing overview for a customer: effective prices versus list prices, custom overrides, and overrides expiring soon.",
        "operationId": "GetPartnerCustomerPricingEndpoint_GetPricing",
        "parameters": [
          {
            "name": "customerUserId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Pricing overview payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerCustomerPricingModel"
                }
              }
            }
          },
          "401": {
            "description": "The request authorization failed."
          },
          "403": {
            "description": "Customer is not assigned to this partner."
          },
          "404": {
            "description": "Customer user account no longer exists."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/customer/{customerUserId}/products": {
      "get": {
        "tags": [
          "Products"
        ],
        "summary": "List Customer Products",
        "description": "List the customer's product enable/disable states, with resource counts per product.",
        "operationId": "GetPartnerCustomerProductsEndpoint_GetProducts",
        "parameters": [
          {
            "name": "customerUserId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          }
        ],
        "responses": {
          "200": {
            "description": "Product listing.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PartnerCustomerProductStateModel"
                  }
                }
              }
            }
          },
          "403": {
            "description": "Customer is not assigned to this partner."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/pricing": {
      "get": {
        "tags": [
          "Pricing"
        ],
        "summary": "Get Partner Pricing",
        "description": "Get the full pricing overview for the authenticated partner: effective prices versus list prices, custom overrides, and overrides expiring soon.",
        "operationId": "GetPartnerPricingEndpoint_GetPricing",
        "responses": {
          "200": {
            "description": "Pricing overview payload.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartnerCustomerPricingModel"
                }
              }
            }
          },
          "401": {
            "description": "The request authorization failed."
          },
          "403": {
            "description": "The authenticated user is not a reseller or MSP partner."
          },
          "404": {
            "description": "Partner user account not found."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/customers/invite": {
      "post": {
        "tags": [
          "Customers"
        ],
        "summary": "Invite Customer",
        "description": "Invite an existing bunny.net user to become a customer of the authenticated partner. An invitation email is sent, and the user is assigned once they accept while signed in.",
        "operationId": "InvitePartnerCustomerEndpoint_Invite",
        "requestBody": {
          "x-name": "request",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvitePartnerCustomerRequest"
              }
            }
          },
          "required": true,
          "x-position": 1
        },
        "responses": {
          "200": {
            "description": "Invitation email sent."
          },
          "400": {
            "description": "Invalid request, or the address is not eligible to be invited.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiErrorData"
                }
              }
            }
          },
          "403": {
            "description": "Authenticated user is not a reseller or MSP partner."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    },
    "/partner/customer/{customerUserId}/products/{productId}": {
      "put": {
        "tags": [
          "Products"
        ],
        "summary": "Set Customer Product",
        "description": "Enable or disable a product on this partner-customer relationship.",
        "operationId": "PutPartnerCustomerProductEndpoint_SetProductEnabled",
        "parameters": [
          {
            "name": "customerUserId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "x-position": 1
          },
          {
            "name": "productId",
            "in": "path",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/PartnerCustomerProductType"
            },
            "x-position": 2
          },
          {
            "name": "enabled",
            "in": "query",
            "schema": {
              "type": "boolean",
              "nullable": true
            },
            "x-position": 3
          }
        ],
        "responses": {
          "204": {
            "description": "Updated."
          },
          "400": {
            "description": "Missing required 'enabled' query parameter, or unsupported product id."
          },
          "403": {
            "description": "Customer is not assigned to this partner."
          }
        },
        "security": [
          {
            "AccessKey": [
              "ResellerPartner",
              "MSPPartner"
            ]
          },
          {
            "bearer": [
              "ResellerPartner",
              "MSPPartner"
            ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "ApiErrorData": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "ErrorKey": {
            "type": "string",
            "nullable": true
          },
          "Field": {
            "type": "string",
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "GetUserAuditLogResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "Logs": {
            "type": "array",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/UserAuditLog"
            }
          },
          "HasMoreData": {
            "type": "boolean"
          },
          "ContinuationToken": {
            "type": "string",
            "nullable": true
          },
          "StartToken": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "UserAuditLog": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "Timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "Product": {
            "type": "string",
            "nullable": true
          },
          "ResourceType": {
            "type": "string",
            "nullable": true
          },
          "ResourceId": {
            "type": "string",
            "nullable": true
          },
          "ResourceOwner": {
            "type": "string",
            "nullable": true
          },
          "Action": {
            "type": "string",
            "nullable": true
          },
          "ActorId": {
            "type": "string",
            "nullable": true
          },
          "ActorType": {
            "type": "string",
            "nullable": true
          },
          "Diff": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "LogOrdering": {
        "type": "string",
        "description": "",
        "x-enumNames": [
          "Ascending",
          "Descending"
        ],
        "enum": [
          "Ascending",
          "Descending"
        ]
      },
      "PartnerCustomerProductType": {
        "type": "integer",
        "description": "1 = CDN\n2 = Database\n3 = DNS\n4 = Magic Containers\n5 = Optimizer\n6 = Edge Scripting\n7 = Shield\n8 = Storage\n9 = Stream",
        "x-enumNames": [
          "CDN",
          "Database",
          "DNS",
          "Magic Containers",
          "Optimizer",
          "Edge Scripting",
          "Shield",
          "Storage",
          "Stream"
        ],
        "enum": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9
        ]
      },
      "BillingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "Balance": {
            "type": "number",
            "description": "The current account balance",
            "format": "double"
          },
          "ThisMonthCharges": {
            "type": "number",
            "description": "The current account charges of the running month",
            "format": "double"
          },
          "LastRechargeBalance": {
            "type": "number",
            "description": "Last recharge amount balance",
            "format": "double"
          },
          "AvailableBalance": {
            "type": "number",
            "description": "The current account balance plus available (unexpired) coupon credit",
            "format": "double"
          },
          "CouponBalance": {
            "type": "number",
            "description": "All available (unexpired) coupon money on the account",
            "format": "decimal"
          },
          "MonthlyCouponUsage": {
            "type": "number",
            "description": "The total coupon credit used this month across all services",
            "format": "decimal"
          },
          "BillingRecords": {
            "type": "array",
            "description": "The list of billing records for this account",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/BillingRecordModel"
            }
          },
          "BillingHistoryChart": {
            "type": "object",
            "description": "The constructed billing history chart data",
            "nullable": true,
            "additionalProperties": {
              "type": "integer",
              "format": "int64"
            }
          },
          "MonthlyChargesEUTraffic": {
            "type": "number",
            "description": "The total charges this month paid for European traffic",
            "format": "double"
          },
          "MonthlyChargesUSTraffic": {
            "type": "number",
            "description": "The total charges this month paid for North American traffic",
            "format": "double"
          },
          "MonthlyChargesASIATraffic": {
            "type": "number",
            "description": "The total charges this month paid for Asian and Oceanian traffic",
            "format": "double"
          },
          "MonthlyChargesAFTraffic": {
            "type": "number",
            "description": "The total charges this month paid for African traffic",
            "format": "double"
          },
          "MonthlyChargesSATraffic": {
            "type": "number",
            "description": "The total charges this month paid for South American traffic",
            "format": "double"
          },
          "MonthlyChargesStorage": {
            "type": "number",
            "description": "The total charges this month paid for Edge Storage",
            "format": "double"
          },
          "MonthlyChargesDNS": {
            "type": "number",
            "description": "The total monthly charges for Bunny DNS",
            "format": "double"
          },
          "MonthlyChargesOptimizer": {
            "type": "number",
            "description": "The monthly charges caused by optimizer.",
            "format": "double"
          },
          "MonthlyChargesTranscribe": {
            "type": "number",
            "description": "The total monthly charges for Bunny Stream Transcribe",
            "format": "double"
          },
          "MonthlyChargesPremiumEncoding": {
            "type": "number",
            "description": "The total monthly charges for Bunny Stream Premium Encoding",
            "format": "decimal"
          },
          "MonthlyChargesExtraPullZones": {
            "type": "number",
            "description": "The monthly charges caused by extra pull zones.",
            "format": "double"
          },
          "MonthlyChargesExtraStorageZones": {
            "type": "number",
            "description": "The monthly charges caused by extra storage zones.",
            "format": "double"
          },
          "MonthlyChargesExtraDnsZones": {
            "type": "number",
            "description": "The monthly charges caused by extra DNS zones.",
            "format": "double"
          },
          "MonthlyChargesExtraVideoLibraries": {
            "type": "number",
            "description": "The monthly charges caused by extra video libraries.",
            "format": "double"
          },
          "MonthlyChargesScripting": {
            "type": "number",
            "description": "The total monthly charges for Bunny Edge Scripting",
            "format": "double"
          },
          "MonthlyChargesScriptingRequests": {
            "type": "number",
            "description": "The total monthly charges for Bunny Edge Scripting Requests",
            "format": "double"
          },
          "MonthlyChargesScriptingCpu": {
            "type": "number",
            "description": "The total monthly charges for Bunny Edge Scripting CPU usage",
            "format": "double"
          },
          "MonthlyChargesDrm": {
            "type": "number",
            "description": "The total monthly charges for DRM",
            "format": "double"
          },
          "MonthlyChargesMagicContainers": {
            "type": "number",
            "description": "The total monthly charges for Magic Containers",
            "format": "decimal"
          },
          "MonthlyMcCpu": {
            "description": "The monthly charges and usage for Magic Containers CPU",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyMcMemory": {
            "description": "The monthly charges and usage for Magic Containers Memory",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyMcIp": {
            "description": "The monthly charges and usage for Magic Containers Anycast IP",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyMcIngressTraffic": {
            "description": "The monthly charges and usage for Magic Containers Ingress Traffic",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyMcEgressTraffic": {
            "description": "The monthly charges and usage for Magic Containers Egress Traffic",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyMcVolumes": {
            "description": "The monthly charges and usage for Magic Containers Persistent Volumes",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyChargesShield": {
            "type": "number",
            "description": "The total monthly charges for Shield",
            "format": "decimal"
          },
          "MonthlyChargesTaxes": {
            "type": "number",
            "description": "The total monthly charges for Taxes",
            "format": "decimal"
          },
          "MonthlyChargesWebSockets": {
            "type": "number",
            "description": "The total monthly charges for WebSockets",
            "format": "decimal"
          },
          "MonthlyChargesDB": {
            "type": "number",
            "description": "The total monthly charges for DB",
            "format": "decimal"
          },
          "MonthlyChargesLoadBalancer": {
            "type": "number",
            "description": "The total monthly charges for Load Balancer",
            "format": "decimal"
          },
          "MonthlyDBWrites": {
            "description": "The monthly charges and usage for BunnyDB row writes",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyDBReads": {
            "description": "The monthly charges and usage for BunnyDB row reads",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyDBStorage": {
            "description": "The monthly charges and usage for BunnyDB storage",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyDBReplica": {
            "description": "The monthly charges and usage for BunnyDB replica storage",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyChargesAiGateway": {
            "type": "number",
            "description": "The total monthly charges for AI Gateway",
            "format": "decimal"
          },
          "MonthlyAiGatewayInputTokens": {
            "description": "The monthly charges and usage for AI Gateway input tokens",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyAiGatewayOutputTokens": {
            "description": "The monthly charges and usage for AI Gateway output tokens",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyAiGatewayCachedTokens": {
            "description": "The monthly charges and usage for AI Gateway cached tokens",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageBreakdown"
              }
            ]
          },
          "MonthlyBandwidthUsed": {
            "type": "integer",
            "description": "Total bandwidth used by the account during this month.",
            "format": "int64"
          },
          "MonthlyDnsSmartQueriesServed": {
            "type": "integer",
            "description": "Total number of Bunny DNS smart queries served this month.",
            "format": "int64"
          },
          "MonthlyDnsNormalQueriesServed": {
            "type": "integer",
            "description": "Total number of Bunny DNS normal queries served this month.",
            "format": "int64"
          },
          "MonthlyTranscriptionMinutes": {
            "type": "integer",
            "description": "Total minutes used for Bunny Stream Transcribe this month.",
            "format": "int64"
          },
          "MonthlyPremiumEncodingBillableMinutes": {
            "type": "integer",
            "description": "Total billable minutes used for Bunny Stream Premium Encoding this month.",
            "format": "int64"
          },
          "MonthlyDRMLicensesIssued": {
            "type": "integer",
            "description": "DRM (enterprise) licenses issued this month.",
            "format": "int64"
          },
          "MonthlyScriptingRequests": {
            "type": "integer",
            "description": "Total number of edge script requests this month.",
            "format": "int64"
          },
          "MonthlyScriptingCpuTime": {
            "type": "integer",
            "description": "Total edge script CPU time (milliseconds) used this month.",
            "format": "int64"
          },
          "BillingEnabled": {
            "type": "boolean",
            "description": "Determines if billing is currently enabled for this user."
          },
          "MinimumMonthlyCommit": {
            "type": "number",
            "description": "Determines the minimum monthly commit of the user.",
            "format": "double"
          },
          "VATRate": {
            "type": "number",
            "description": "The VAT rate for the user's account.",
            "format": "decimal"
          },
          "NextMonthVATRate": {
            "type": "number",
            "description": "Next month VAT rate for the user's account.",
            "format": "decimal"
          },
          "AutomaticPaymentImageUrl": {
            "type": "string",
            "description": "If an automatic payment method is configured, this will contain the image url of the payment method",
            "nullable": true
          },
          "AutomaticPaymentCardType": {
            "type": "string",
            "description": "If an automatic payment method is configured with a credit card, this will contain the name of the payment credit card",
            "nullable": true
          },
          "AutomaticPaymentIdentifier": {
            "type": "string",
            "description": "If an automatic payment method is configured, this will contain the identifier of the payment method",
            "nullable": true
          },
          "AutomaticPaymentAmount": {
            "type": "number",
            "description": "If an automatic payments are configured, this contains the payment amount that will be made during an automatic recharge",
            "format": "decimal"
          },
          "AutomaticRechargeTreshold": {
            "type": "number",
            "description": "If an automatic payments are configured, this contains the account balance amount that will trigger an automatic recharge",
            "format": "decimal"
          },
          "AutomaticRechargeEnabled": {
            "type": "boolean",
            "description": "Determines if automatic recharge is currently enabled."
          },
          "AutomaticPaymentFailureCount": {
            "type": "integer",
            "description": "Determines the number of failed automatic recharges that the system made since the last successful payment.",
            "format": "int32"
          },
          "SavedPaymentMethods": {
            "type": "array",
            "description": "Contains the list of saved payment methods on the user's account",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/BillingSavedPaymentMethod"
            }
          },
          "EUUSDiscount": {
            "type": "integer",
            "description": "The account wide pricing discount for EU and US region.",
            "format": "int32"
          },
          "SouthAmericaDiscount": {
            "type": "integer",
            "description": "The account wide pricing discount for South America region.",
            "format": "int32"
          },
          "AfricaDiscount": {
            "type": "integer",
            "description": "The account wide pricing discount for Africa region.",
            "format": "int32"
          },
          "AsiaOceaniaDiscount": {
            "type": "integer",
            "description": "The account wide pricing discount for Asia & Oceania region.",
            "format": "int32"
          },
          "OptimizerMonthlyPrice": {
            "type": "number",
            "description": "Optimizer monthly price per pull zone for this account (unless overridden on pull zone level).",
            "format": "decimal"
          },
          "DrmBaseMonthlyPrice": {
            "type": "number",
            "description": "DRM (Enterprise) base monthly price per video library.",
            "format": "decimal"
          },
          "DrmCostPerLicense": {
            "type": "number",
            "description": "DRM (Enterprise) cost per license or default pricing tier applied if null.",
            "format": "decimal",
            "nullable": true
          }
        }
      },
      "BillingRecordModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "Id": {
            "type": "integer",
            "description": "The ID of the billing record",
            "format": "int64"
          },
          "PaymentId": {
            "type": "string",
            "description": "The external ID of the payment",
            "nullable": true
          },
          "Amount": {
            "type": "number",
            "description": "The amount linked to the record model",
            "format": "double"
          },
          "Payer": {
            "type": "string",
            "description": "The payer reference that sent the payment",
            "nullable": true
          },
          "Timestamp": {
            "type": "string",
            "description": "The date and time when the billing record was created",
            "format": "date-time"
          },
          "Type": {
            "description": "The type of the billing record. PayPal = 0, Crypto = 1, CreditCard = 2, MonthlyUsage = 3, Refund = 4, CouponCode = 5, BankTransfer = 6, AffiliateCredits = 7",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BillingRecordType"
              }
            ]
          },
          "InvoiceAvailable": {
            "type": "boolean",
            "description": "Determines if an invoice is available"
          },
          "DocumentDownloadUrl": {
            "type": "string",
            "description": "The URL where the invoice or document can be downloaded. Null if this is not available.",
            "nullable": true
          },
          "DetailedDocumentDownloadUrl": {
            "type": "string",
            "description": "The URL where the document with product usage breakdown can be downloaded. Null if this is not available.",
            "nullable": true
          }
        }
      },
      "BillingRecordType": {
        "type": "integer",
        "description": "0 = PayPal\n1 = Crypto\n2 = CreditCard\n3 = MonthlyUsage\n4 = Refund\n5 = CouponCode\n6 = BankTransfer\n7 = AffiliateCredits",
        "x-enumNames": [
          "PayPal",
          "Crypto",
          "CreditCard",
          "MonthlyUsage",
          "Refund",
          "CouponCode",
          "BankTransfer",
          "AffiliateCredits"
        ],
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7
        ]
      },
      "UsageBreakdown": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "Usage": {
            "type": "number",
            "description": "The usage based charge in USD",
            "format": "decimal"
          },
          "TotalUnits": {
            "type": "integer",
            "description": "The billed quantity for the related product",
            "format": "int64"
          },
          "MeasuringUnit": {
            "type": "string",
            "description": "Measuring Unit for TotalUnits (e.g. Rows, GB, Seconds, Bytes, Block-seconds)",
            "nullable": true
          }
        }
      },
      "BillingSavedPaymentMethod": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "Token": {
            "type": "string",
            "nullable": true
          },
          "ImageUrl": {
            "type": "string",
            "nullable": true
          },
          "ExpirationDate": {
            "type": "string",
            "nullable": true
          },
          "LastFour": {
            "type": "string",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "nullable": true
          }
        }
      },
      "CreatePartnerCustomerResponse": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "CustomerUserId": {
            "type": "string",
            "description": "Id of the newly created customer user.",
            "nullable": true
          }
        }
      },
      "CreatePartnerCustomerRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "Email"
        ],
        "properties": {
          "Email": {
            "type": "string",
            "description": "Primary account email of the customer to create.",
            "format": "email",
            "minLength": 1
          },
          "FirstName": {
            "type": "string",
            "description": "Customer's first name.",
            "nullable": true
          },
          "LastName": {
            "type": "string",
            "description": "Customer's last name.",
            "nullable": true
          },
          "Country": {
            "type": "string",
            "description": "Customer's country.",
            "nullable": true
          },
          "BillingEmail": {
            "type": "string",
            "description": "Email for receiving invoices and billing updates.",
            "nullable": true
          },
          "CompanyName": {
            "type": "string",
            "description": "Customer's company name.",
            "nullable": true
          },
          "CompanyVatNumber": {
            "type": "string",
            "description": "Customer's company VAT number.",
            "nullable": true
          },
          "InternalNotes": {
            "type": "string",
            "description": "Internal notes about the customer, visible only to partner admins.",
            "nullable": true
          }
        }
      },
      "PartnerCustomerContractModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "PartnerCustomerId": {
            "type": "integer",
            "description": "Id of the partner-customer relationship the contract applies to. Set for customer contracts, null for partner-level contracts",
            "format": "int64",
            "nullable": true
          },
          "ContractValue": {
            "type": "number",
            "description": "Total contract value over the agreed period",
            "format": "decimal"
          },
          "MonthlyCommitmentValue": {
            "type": "number",
            "description": "Optional monthly commitment value displayed alongside usage charts. Null if no monthly commitment is agreed",
            "format": "decimal",
            "nullable": true
          },
          "ContractStartDate": {
            "type": "string",
            "description": "Start date of the contract",
            "format": "date-time"
          },
          "ContractEndDate": {
            "type": "string",
            "description": "End date of the contract",
            "format": "date-time"
          },
          "ContractBillingType": {
            "description": "Billing arrangement agreed with the customer\n\n1 = Pay As You Go\n2 = Post Paid",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PartnerContractBillingType"
              }
            ]
          },
          "Currency": {
            "description": "Currency of the contract\n\n0 = US Dollar\n1 = Euro",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PartnerCustomerContractCurrency"
              }
            ]
          },
          "UpdatedByUserId": {
            "type": "string",
            "description": "User id of the user updating this contract",
            "nullable": true
          },
          "PartnerUserId": {
            "type": "string",
            "description": "User id of the partner this contract applies to. Set for partner-level contracts, null for customer contracts",
            "nullable": true
          }
        }
      },
      "PartnerContractBillingType": {
        "type": "integer",
        "description": "1 = Pay As You Go\n2 = Post Paid",
        "x-enumNames": [
          "Pay As You Go",
          "Post Paid"
        ],
        "enum": [
          1,
          2
        ]
      },
      "PartnerCustomerContractCurrency": {
        "type": "integer",
        "description": "0 = US Dollar\n1 = Euro",
        "x-enumNames": [
          "US Dollar",
          "Euro"
        ],
        "enum": [
          0,
          1
        ]
      },
      "PartnerCustomerOverviewModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "MonthlyBandwidthUsedBytes": {
            "type": "integer",
            "description": "Bandwidth served to the customer in the current month",
            "format": "int64"
          },
          "MonthlyRequestCount": {
            "type": "integer",
            "description": "Total pull-zone requests served to the customer in the current month",
            "format": "int64"
          },
          "TotalStorageUsedBytes": {
            "type": "integer",
            "description": "Storage currently used across all of the customer's storage zones",
            "format": "int64"
          },
          "MonthlyCostUsd": {
            "type": "number",
            "description": "Accrued cost for the current calendar month",
            "format": "double"
          },
          "ContractValue": {
            "type": "number",
            "description": "Contract value agreed with the partner.",
            "format": "decimal",
            "nullable": true
          },
          "ContractCurrency": {
            "description": "Currency of the contract value.\n\n0 = US Dollar\n1 = Euro",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/PartnerCustomerContractCurrency"
              }
            ]
          },
          "BandwidthUsedChart": {
            "type": "object",
            "description": "Daily bandwidth used over the last 7 days",
            "nullable": true,
            "additionalProperties": {
              "type": "number",
              "format": "double"
            }
          },
          "Products": {
            "type": "array",
            "description": "Enable/disable state and resource count for each product the customer can use",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/PartnerCustomerProductStateModel"
            }
          }
        }
      },
      "PartnerCustomerProductStateModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "ProductId": {
            "description": "The product this state applies to\n\n1 = CDN\n2 = Database\n3 = DNS\n4 = Magic Containers\n5 = Optimizer\n6 = Edge Scripting\n7 = Shield\n8 = Storage\n9 = Stream",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PartnerCustomerProductType"
              }
            ]
          },
          "IsEnabled": {
            "type": "boolean",
            "description": "Whether the partner has enabled this product for the customer"
          },
          "ResourceCount": {
            "type": "integer",
            "description": "Number of resources the customer currently has for this product",
            "format": "int32"
          }
        }
      },
      "PartnerCustomerPricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "CustomOverrideCount": {
            "type": "integer",
            "description": "Number of active custom pricing rows the customer has",
            "format": "int32"
          },
          "ExpiringSoon": {
            "type": "array",
            "description": "Time-limited custom pricing rows that revert to list pricing soon",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/ExpiringOverrideModel"
            }
          },
          "CdnStandardTier": {
            "description": "CDN Standard tier price per GB and PoP configuration",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/CdnTierPricingModel"
              }
            ]
          },
          "CdnVolumeTier": {
            "description": "CDN Volume tier price per GB and PoP configuration",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/CdnTierPricingModel"
              }
            ]
          },
          "CdnStandardTierDiscount": {
            "description": "Per-region discount applied to the CDN Standard tier",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/CdnStandardTierDiscountModel"
              }
            ]
          },
          "CdnVolumeTierPricing": {
            "description": "Tiered $/GB CDN Volume pricing based on total account traffic",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/CdnVolumeTierPricingModel"
              }
            ]
          },
          "Storage": {
            "description": "Edge and Standard storage pricing per TB per month",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/StoragePricingModel"
              }
            ]
          },
          "Optimizer": {
            "description": "Optimizer price per zone per month",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/OptimizerPricingModel"
              }
            ]
          },
          "ExtraZones": {
            "description": "Free zone allowances and extra-zone pricing",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ExtraZonePricingModel"
              }
            ]
          },
          "BunnyShield": {
            "description": "Bunny Shield tier pricing",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/BunnyShieldPricingModel"
              }
            ]
          },
          "Drm": {
            "description": "DRM base and per-license pricing",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/DrmPricingModel"
              }
            ]
          },
          "Transcribing": {
            "description": "Transcribing price per minute (flat or tiered)",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TieredUnitPriceModel"
              }
            ]
          },
          "PremiumEncoding": {
            "description": "Premium encoding price per normalized minute",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TieredUnitPriceModel"
              }
            ]
          },
          "EdgeScripting": {
            "description": "Edge Scripting request and CPU pricing",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/EdgeScriptingPricingModel"
              }
            ]
          },
          "WebSockets": {
            "description": "WebSockets price per 1M connection minutes (flat or tiered)",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TieredUnitPriceModel"
              }
            ]
          },
          "BunnyDb": {
            "description": "BunnyDB (database) pricing for its consumption sub-products",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/BunnyDbPricingModel"
              }
            ]
          }
        }
      },
      "ExpiringOverrideModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "ProductId": {
            "description": "Product the override applies to",
            "oneOf": [
              {
                "$ref": "#/components/schemas/BalanceAdjustmentSource"
              }
            ]
          },
          "ProductName": {
            "type": "string",
            "description": "Human-readable product name, e.g. \"DNS\"",
            "nullable": true
          },
          "Label": {
            "type": "string",
            "description": "Override label / description, e.g. \"Standard Queries\"",
            "nullable": true
          },
          "PricePerUnit": {
            "type": "number",
            "description": "Overridden flat price per unit. Null when the override is tiered (see Tiers)",
            "format": "decimal",
            "nullable": true
          },
          "Tiers": {
            "type": "array",
            "description": "Pricing tiers, populated when the override is tiered; null for a flat override",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/PricingTierModel"
            }
          },
          "ValidTo": {
            "type": "string",
            "description": "Date the override reverts to list pricing",
            "format": "date-time"
          },
          "DaysLeft": {
            "type": "integer",
            "description": "Whole days remaining until the override expires",
            "format": "int32"
          }
        }
      },
      "BalanceAdjustmentSource": {
        "type": "integer",
        "description": "1000 = CDN\n1100 = CDN_Standard_Tier\n1101 = CDN_Standard_Tier_EU_Traffic\n1102 = CDN_Standard_Tier_NA_Traffic\n1103 = CDN_Standard_Tier_APAC_Traffic\n1104 = CDN_Standard_Tier_AF_Traffic\n1105 = CDN_Standard_Tier_SA_Traffic\n1106 = CDN_Standard_Tier_Uncategorized\n1200 = CDN_Standard_Tier_Stream\n1201 = CDN_Standard_Tier_Stream_EU_Traffic\n1202 = CDN_Standard_Tier_Stream_NA_Traffic\n1203 = CDN_Standard_Tier_Stream_APAC_Traffic\n1204 = CDN_Standard_Tier_Stream_AF_Traffic\n1205 = CDN_Standard_Tier_Stream_SA_Traffic\n1206 = CDN_Standard_Tier_Stream_Uncategorized\n1300 = CDN_Volume_Tier\n1301 = CDN_Volume_Tier_EU_Traffic\n1302 = CDN_Volume_Tier_NA_Traffic\n1303 = CDN_Volume_Tier_APAC_Traffic\n1304 = CDN_Volume_Tier_AF_Traffic\n1305 = CDN_Volume_Tier_SA_Traffic\n1306 = CDN_Volume_Tier_Uncategorized\n1400 = CDN_Volume_Tier_Stream\n1401 = CDN_Volume_Tier_Stream_EU_Traffic\n1402 = CDN_Volume_Tier_Stream_NA_Traffic\n1403 = CDN_Volume_Tier_Stream_APAC_Traffic\n1404 = CDN_Volume_Tier_Stream_AF_Traffic\n1405 = CDN_Volume_Tier_Stream_SA_Traffic\n1406 = CDN_Volume_Tier_Stream_Uncategorized\n1500 = CDN_Standard_Tier_Storage\n1501 = CDN_Standard_Tier_Storage_EU_Traffic\n1502 = CDN_Standard_Tier_Storage_NA_Traffic\n1503 = CDN_Standard_Tier_Storage_APAC_Traffic\n1504 = CDN_Standard_Tier_Storage_AF_Traffic\n1505 = CDN_Standard_Tier_Storage_SA_Traffic\n1506 = CDN_Standard_Tier_Storage_Uncategorized\n1510 = CDN_Volume_Tier_Storage\n1511 = CDN_Volume_Tier_Storage_EU_Traffic\n1512 = CDN_Volume_Tier_Storage_NA_Traffic\n1513 = CDN_Volume_Tier_Storage_APAC_Traffic\n1514 = CDN_Volume_Tier_Storage_AF_Traffic\n1515 = CDN_Volume_Tier_Storage_SA_Traffic\n1516 = CDN_Volume_Tier_Storage_Uncategorized\n1600 = CDN_WebSockets_Tier1000\n1605 = CDN_WebSockets_Tier2500\n1610 = CDN_WebSockets_Tier5000\n1615 = CDN_WebSockets_Tier10000\n1620 = CDN_WebSockets_Tier25000\n1630 = CDN_WebSockets_ConsumptionBased\n1700 = CDN_Standard_Tier_MagicContainers\n1701 = CDN_Standard_Tier_MagicContainers_EU_Traffic\n1702 = CDN_Standard_Tier_MagicContainers_NA_Traffic\n1703 = CDN_Standard_Tier_MagicContainers_APAC_Traffic\n1704 = CDN_Standard_Tier_MagicContainers_AF_Traffic\n1705 = CDN_Standard_Tier_MagicContainers_SA_Traffic\n1706 = CDN_Standard_Tier_MagicContainers_Uncategorized\n1710 = CDN_Volume_Tier_MagicContainers\n1711 = CDN_Volume_Tier_MagicContainers_EU_Traffic\n1712 = CDN_Volume_Tier_MagicContainers_NA_Traffic\n1713 = CDN_Volume_Tier_MagicContainers_APAC_Traffic\n1714 = CDN_Volume_Tier_MagicContainers_AF_Traffic\n1715 = CDN_Volume_Tier_MagicContainers_SA_Traffic\n1716 = CDN_Volume_Tier_MagicContainers_Uncategorized\n1800 = CDN_Standard_Tier_Scripting\n1801 = CDN_Standard_Tier_Scripting_EU_Traffic\n1802 = CDN_Standard_Tier_Scripting_NA_Traffic\n1803 = CDN_Standard_Tier_Scripting_APAC_Traffic\n1804 = CDN_Standard_Tier_Scripting_AF_Traffic\n1805 = CDN_Standard_Tier_Scripting_SA_Traffic\n1806 = CDN_Standard_Tier_Scripting_Uncategorized\n1810 = CDN_Volume_Tier_Scripting\n1811 = CDN_Volume_Tier_Scripting_EU_Traffic\n1812 = CDN_Volume_Tier_Scripting_NA_Traffic\n1813 = CDN_Volume_Tier_Scripting_APAC_Traffic\n1814 = CDN_Volume_Tier_Scripting_AF_Traffic\n1815 = CDN_Volume_Tier_Scripting_SA_Traffic\n1816 = CDN_Volume_Tier_Scripting_Uncategorized\n2000 = Storage\n2100 = Storage_Standard_Tier\n2200 = Storage_SSD_Tier\n2300 = Storage_Standard_Tier_Stream\n2400 = Storage_SSD_Tier_Stream\n3000 = DNS\n3100 = DNS_Smart_Queries\n3200 = DNS_Standard_Queries\n4000 = Stream\n4100 = Transcribing\n4200 = PremiumEncoding\n4300 = DRM_Base\n4400 = DRM_LicenseIssued\n4501 = LiveEncoding_SD\n4502 = LiveEncoding_HD\n4503 = LiveEncoding_4K\n5000 = Scripting_CDN\n5100 = Scripting_DNS\n5200 = Scripting_CDN_Requests\n5300 = Scripting_CDN_CPU\n6000 = Optimizer\n6100 = Optimizer_Burrow_TunneledTraffic\n7000 = ExtraZones\n7001 = ExtraZones_CDN\n7002 = ExtraZones_Stream\n7003 = ExtraZones_Storage\n7004 = ExtraZones_DNS\n8000 = MonthlyCommitment\n9000 = TopUp\n10000 = MagicContainers\n10100 = MagicContainers_CPU\n10200 = MagicContainers_RAM\n10300 = MagicContainers_IP\n10301 = MagicContainers_AnycastIP\n10400 = MagicContainers_Traffic\n10401 = MagicContainers_AnycastTraffic\n10410 = MagicContainers_AnycastIngressTraffic\n10411 = MagicContainers_AnycastIngress_EU_Traffic\n10412 = MagicContainers_AnycastIngress_NA_Traffic\n10413 = MagicContainers_AnycastIngress_ASIA_Traffic\n10414 = MagicContainers_AnycastIngress_Australia_Traffic\n10415 = MagicContainers_AnycastIngress_AF_Traffic\n10416 = MagicContainers_AnycastIngress_SA_Traffic\n10417 = MagicContainers_AnycastIngress_Uncategorized\n10420 = MagicContainers_EgressTraffic\n10421 = MagicContainers_Egress_EU_Traffic\n10422 = MagicContainers_Egress_NA_Traffic\n10423 = MagicContainers_Egress_ASIA_Traffic\n10424 = MagicContainers_Egress_Australia_Traffic\n10425 = MagicContainers_Egress_AF_Traffic\n10426 = MagicContainers_Egress_SA_Traffic\n10427 = MagicContainers_Egress_Uncategorized\n10500 = MagicContainers_Volumes\n10510 = MagicContainers_PersistentVolumes\n11000 = Shield\n11005 = ShieldBasicOverages\n11100 = ShieldAdvancedMonthlyPlan\n11105 = ShieldAdvancedOverages\n11110 = ShieldBusinessMonthlyPlan\n11115 = ShieldBusinessOverages\n11120 = ShieldEnterpriseMonthlyPlan\n11125 = ShieldEnterpriseOverages\n12000 = BunnyDB\n12100 = BunnyDB_Storage\n12200 = BunnyDB_ReplicaStorage\n12300 = BunnyDB_RowReads\n12400 = BunnyDB_RowWrites\n13000 = CDN_LoadBalancer_MonthlyFee\n13100 = CDN_LoadBalancer_RequestOverages",
        "x-enumNames": [
          "CDN",
          "CDN_Standard_Tier",
          "CDN_Standard_Tier_EU_Traffic",
          "CDN_Standard_Tier_NA_Traffic",
          "CDN_Standard_Tier_APAC_Traffic",
          "CDN_Standard_Tier_AF_Traffic",
          "CDN_Standard_Tier_SA_Traffic",
          "CDN_Standard_Tier_Uncategorized",
          "CDN_Standard_Tier_Stream",
          "CDN_Standard_Tier_Stream_EU_Traffic",
          "CDN_Standard_Tier_Stream_NA_Traffic",
          "CDN_Standard_Tier_Stream_APAC_Traffic",
          "CDN_Standard_Tier_Stream_AF_Traffic",
          "CDN_Standard_Tier_Stream_SA_Traffic",
          "CDN_Standard_Tier_Stream_Uncategorized",
          "CDN_Volume_Tier",
          "CDN_Volume_Tier_EU_Traffic",
          "CDN_Volume_Tier_NA_Traffic",
          "CDN_Volume_Tier_APAC_Traffic",
          "CDN_Volume_Tier_AF_Traffic",
          "CDN_Volume_Tier_SA_Traffic",
          "CDN_Volume_Tier_Uncategorized",
          "CDN_Volume_Tier_Stream",
          "CDN_Volume_Tier_Stream_EU_Traffic",
          "CDN_Volume_Tier_Stream_NA_Traffic",
          "CDN_Volume_Tier_Stream_APAC_Traffic",
          "CDN_Volume_Tier_Stream_AF_Traffic",
          "CDN_Volume_Tier_Stream_SA_Traffic",
          "CDN_Volume_Tier_Stream_Uncategorized",
          "CDN_Standard_Tier_Storage",
          "CDN_Standard_Tier_Storage_EU_Traffic",
          "CDN_Standard_Tier_Storage_NA_Traffic",
          "CDN_Standard_Tier_Storage_APAC_Traffic",
          "CDN_Standard_Tier_Storage_AF_Traffic",
          "CDN_Standard_Tier_Storage_SA_Traffic",
          "CDN_Standard_Tier_Storage_Uncategorized",
          "CDN_Volume_Tier_Storage",
          "CDN_Volume_Tier_Storage_EU_Traffic",
          "CDN_Volume_Tier_Storage_NA_Traffic",
          "CDN_Volume_Tier_Storage_APAC_Traffic",
          "CDN_Volume_Tier_Storage_AF_Traffic",
          "CDN_Volume_Tier_Storage_SA_Traffic",
          "CDN_Volume_Tier_Storage_Uncategorized",
          "CDN_WebSockets_Tier1000",
          "CDN_WebSockets_Tier2500",
          "CDN_WebSockets_Tier5000",
          "CDN_WebSockets_Tier10000",
          "CDN_WebSockets_Tier25000",
          "CDN_WebSockets_ConsumptionBased",
          "CDN_Standard_Tier_MagicContainers",
          "CDN_Standard_Tier_MagicContainers_EU_Traffic",
          "CDN_Standard_Tier_MagicContainers_NA_Traffic",
          "CDN_Standard_Tier_MagicContainers_APAC_Traffic",
          "CDN_Standard_Tier_MagicContainers_AF_Traffic",
          "CDN_Standard_Tier_MagicContainers_SA_Traffic",
          "CDN_Standard_Tier_MagicContainers_Uncategorized",
          "CDN_Volume_Tier_MagicContainers",
          "CDN_Volume_Tier_MagicContainers_EU_Traffic",
          "CDN_Volume_Tier_MagicContainers_NA_Traffic",
          "CDN_Volume_Tier_MagicContainers_APAC_Traffic",
          "CDN_Volume_Tier_MagicContainers_AF_Traffic",
          "CDN_Volume_Tier_MagicContainers_SA_Traffic",
          "CDN_Volume_Tier_MagicContainers_Uncategorized",
          "CDN_Standard_Tier_Scripting",
          "CDN_Standard_Tier_Scripting_EU_Traffic",
          "CDN_Standard_Tier_Scripting_NA_Traffic",
          "CDN_Standard_Tier_Scripting_APAC_Traffic",
          "CDN_Standard_Tier_Scripting_AF_Traffic",
          "CDN_Standard_Tier_Scripting_SA_Traffic",
          "CDN_Standard_Tier_Scripting_Uncategorized",
          "CDN_Volume_Tier_Scripting",
          "CDN_Volume_Tier_Scripting_EU_Traffic",
          "CDN_Volume_Tier_Scripting_NA_Traffic",
          "CDN_Volume_Tier_Scripting_APAC_Traffic",
          "CDN_Volume_Tier_Scripting_AF_Traffic",
          "CDN_Volume_Tier_Scripting_SA_Traffic",
          "CDN_Volume_Tier_Scripting_Uncategorized",
          "Storage",
          "Storage_Standard_Tier",
          "Storage_SSD_Tier",
          "Storage_Standard_Tier_Stream",
          "Storage_SSD_Tier_Stream",
          "DNS",
          "DNS_Smart_Queries",
          "DNS_Standard_Queries",
          "Stream",
          "Transcribing",
          "PremiumEncoding",
          "DRM_Base",
          "DRM_LicenseIssued",
          "LiveEncoding_SD",
          "LiveEncoding_HD",
          "LiveEncoding_4K",
          "Scripting_CDN",
          "Scripting_DNS",
          "Scripting_CDN_Requests",
          "Scripting_CDN_CPU",
          "Optimizer",
          "Optimizer_Burrow_TunneledTraffic",
          "ExtraZones",
          "ExtraZones_CDN",
          "ExtraZones_Stream",
          "ExtraZones_Storage",
          "ExtraZones_DNS",
          "MonthlyCommitment",
          "TopUp",
          "MagicContainers",
          "MagicContainers_CPU",
          "MagicContainers_RAM",
          "MagicContainers_IP",
          "MagicContainers_AnycastIP",
          "MagicContainers_Traffic",
          "MagicContainers_AnycastTraffic",
          "MagicContainers_AnycastIngressTraffic",
          "MagicContainers_AnycastIngress_EU_Traffic",
          "MagicContainers_AnycastIngress_NA_Traffic",
          "MagicContainers_AnycastIngress_ASIA_Traffic",
          "MagicContainers_AnycastIngress_Australia_Traffic",
          "MagicContainers_AnycastIngress_AF_Traffic",
          "MagicContainers_AnycastIngress_SA_Traffic",
          "MagicContainers_AnycastIngress_Uncategorized",
          "MagicContainers_EgressTraffic",
          "MagicContainers_Egress_EU_Traffic",
          "MagicContainers_Egress_NA_Traffic",
          "MagicContainers_Egress_ASIA_Traffic",
          "MagicContainers_Egress_Australia_Traffic",
          "MagicContainers_Egress_AF_Traffic",
          "MagicContainers_Egress_SA_Traffic",
          "MagicContainers_Egress_Uncategorized",
          "MagicContainers_Volumes",
          "MagicContainers_PersistentVolumes",
          "Shield",
          "ShieldBasicOverages",
          "ShieldAdvancedMonthlyPlan",
          "ShieldAdvancedOverages",
          "ShieldBusinessMonthlyPlan",
          "ShieldBusinessOverages",
          "ShieldEnterpriseMonthlyPlan",
          "ShieldEnterpriseOverages",
          "BunnyDB",
          "BunnyDB_Storage",
          "BunnyDB_ReplicaStorage",
          "BunnyDB_RowReads",
          "BunnyDB_RowWrites",
          "CDN_LoadBalancer_MonthlyFee",
          "CDN_LoadBalancer_RequestOverages"
        ],
        "enum": [
          1000,
          1100,
          1101,
          1102,
          1103,
          1104,
          1105,
          1106,
          1200,
          1201,
          1202,
          1203,
          1204,
          1205,
          1206,
          1300,
          1301,
          1302,
          1303,
          1304,
          1305,
          1306,
          1400,
          1401,
          1402,
          1403,
          1404,
          1405,
          1406,
          1500,
          1501,
          1502,
          1503,
          1504,
          1505,
          1506,
          1510,
          1511,
          1512,
          1513,
          1514,
          1515,
          1516,
          1600,
          1605,
          1610,
          1615,
          1620,
          1630,
          1700,
          1701,
          1702,
          1703,
          1704,
          1705,
          1706,
          1710,
          1711,
          1712,
          1713,
          1714,
          1715,
          1716,
          1800,
          1801,
          1802,
          1803,
          1804,
          1805,
          1806,
          1810,
          1811,
          1812,
          1813,
          1814,
          1815,
          1816,
          2000,
          2100,
          2200,
          2300,
          2400,
          3000,
          3100,
          3200,
          4000,
          4100,
          4200,
          4300,
          4400,
          4501,
          4502,
          4503,
          5000,
          5100,
          5200,
          5300,
          6000,
          6100,
          7000,
          7001,
          7002,
          7003,
          7004,
          8000,
          9000,
          10000,
          10100,
          10200,
          10300,
          10301,
          10400,
          10401,
          10410,
          10411,
          10412,
          10413,
          10414,
          10415,
          10416,
          10417,
          10420,
          10421,
          10422,
          10423,
          10424,
          10425,
          10426,
          10427,
          10500,
          10510,
          11000,
          11005,
          11100,
          11105,
          11110,
          11115,
          11120,
          11125,
          12000,
          12100,
          12200,
          12300,
          12400,
          13000,
          13100
        ]
      },
      "PricingTierModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "ThresholdFrom": {
            "type": "integer",
            "description": "Inclusive lower bound of the tier, in product units",
            "format": "int64"
          },
          "ThresholdTo": {
            "type": "integer",
            "description": "Exclusive upper bound of the tier, in product units. Null for the unbounded top tier",
            "format": "int64",
            "nullable": true
          },
          "PricePerUnit": {
            "type": "number",
            "description": "Price per unit within this tier",
            "format": "decimal"
          },
          "TierOrder": {
            "type": "integer",
            "description": "Tier ordering, ascending",
            "format": "int32"
          },
          "Description": {
            "type": "string",
            "description": "Optional tier description",
            "nullable": true
          }
        }
      },
      "CdnTierPricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "PricePerGb": {
            "type": "number",
            "description": "Effective price per GB",
            "format": "double"
          },
          "DefaultPricePerGb": {
            "type": "number",
            "description": "Public list price per GB",
            "format": "double"
          },
          "IsOverridden": {
            "type": "boolean",
            "description": "Whether the customer has an explicit price override"
          },
          "EnabledPops": {
            "type": "string",
            "description": "Comma-separated enabled PoP codes, if configured",
            "nullable": true
          },
          "DisabledPops": {
            "type": "string",
            "description": "Comma-separated disabled PoP codes, if configured",
            "nullable": true
          },
          "ExtraPops": {
            "type": "string",
            "description": "Comma-separated extra PoP codes, if configured (Volume tier only)",
            "nullable": true
          }
        }
      },
      "CdnStandardTierDiscountModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "NorthAmericaEuropePercent": {
            "type": "number",
            "description": "Discount % for North America / Europe",
            "format": "double"
          },
          "AsiaOceaniaPercent": {
            "type": "number",
            "description": "Discount % for Asia & Oceania",
            "format": "double"
          },
          "SouthAmericaPercent": {
            "type": "number",
            "description": "Discount % for South America",
            "format": "double"
          },
          "AfricaPercent": {
            "type": "number",
            "description": "Discount % for Africa",
            "format": "double"
          }
        }
      },
      "CdnVolumeTierPricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "Under100TbPerGb": {
            "type": "number",
            "description": "Price per GB for the <100TB tier. Null means list pricing",
            "format": "double",
            "nullable": true
          },
          "From100TbPerGb": {
            "type": "number",
            "description": "Price per GB for the 100TB-500TB tier. Null means list pricing",
            "format": "double",
            "nullable": true
          },
          "From500TbPerGb": {
            "type": "number",
            "description": "Price per GB for the 500TB-1PB tier. Null means list pricing",
            "format": "double",
            "nullable": true
          },
          "From1000TbPerGb": {
            "type": "number",
            "description": "Price per GB for the 1PB-2PB tier. Null means list pricing",
            "format": "double",
            "nullable": true
          },
          "From2000TbPerGb": {
            "type": "number",
            "description": "Price per GB for the >2PB tier. Null means list pricing",
            "format": "double",
            "nullable": true
          }
        }
      },
      "StoragePricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "DiscountPercent": {
            "type": "number",
            "description": "Storage discount percentage",
            "format": "double"
          },
          "EdgePerTbMonth": {
            "type": "number",
            "description": "Effective edge storage price per TB per month",
            "format": "double"
          },
          "DefaultEdgePerTbMonth": {
            "type": "number",
            "description": "Public list edge storage price per TB per month",
            "format": "double"
          },
          "EdgeIsOverridden": {
            "type": "boolean",
            "description": "Whether edge storage has an explicit price override"
          },
          "StandardPerTbMonth": {
            "type": "number",
            "description": "Effective standard storage price per TB per month",
            "format": "double"
          },
          "DefaultStandardPerTbMonth": {
            "type": "number",
            "description": "Public list standard storage price per TB per month",
            "format": "double"
          },
          "StandardIsOverridden": {
            "type": "boolean",
            "description": "Whether standard storage has an explicit price override"
          }
        }
      },
      "OptimizerPricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "PerZoneMonth": {
            "type": "number",
            "description": "Effective Optimizer price per zone per month",
            "format": "decimal"
          },
          "DefaultPerZoneMonth": {
            "type": "number",
            "description": "Public list Optimizer price per zone per month",
            "format": "decimal"
          },
          "IsOverridden": {
            "type": "boolean",
            "description": "Whether the price differs from the list price"
          }
        }
      },
      "ExtraZonePricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "FreePullZones": {
            "type": "integer",
            "format": "int32"
          },
          "ExtraPullZonePrice": {
            "type": "number",
            "format": "decimal",
            "nullable": true
          },
          "FreeStorageZones": {
            "type": "integer",
            "format": "int32"
          },
          "ExtraStorageZonePrice": {
            "type": "number",
            "format": "decimal",
            "nullable": true
          },
          "FreeDnsZones": {
            "type": "integer",
            "format": "int32"
          },
          "ExtraDnsZonePrice": {
            "type": "number",
            "format": "decimal",
            "nullable": true
          },
          "FreeVideoLibraries": {
            "type": "integer",
            "format": "int32"
          },
          "ExtraVideoLibraryPrice": {
            "type": "number",
            "format": "decimal",
            "nullable": true
          }
        }
      },
      "BunnyShieldPricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "Basic": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/BunnyShieldTierModel"
              }
            ]
          },
          "Advanced": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/BunnyShieldTierModel"
              }
            ]
          },
          "Business": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/BunnyShieldTierModel"
              }
            ]
          },
          "Enterprise": {
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/BunnyShieldTierModel"
              }
            ]
          }
        }
      },
      "BunnyShieldTierModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "MonthlyCost": {
            "type": "number",
            "description": "Monthly subscription cost for the tier",
            "format": "decimal"
          },
          "DefaultMonthlyCost": {
            "type": "number",
            "description": "Public list monthly subscription cost",
            "format": "decimal"
          },
          "OveragesCostPerMillion": {
            "type": "number",
            "description": "Overage cost per 1M requests",
            "format": "decimal"
          },
          "DefaultOveragesCostPerMillion": {
            "type": "number",
            "description": "Public list overage cost per 1M requests",
            "format": "decimal"
          },
          "IncludedRequests": {
            "type": "integer",
            "description": "Requests included in the tier before overages apply",
            "format": "int64"
          }
        }
      },
      "DrmPricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "BaseFeePerLibraryMonth": {
            "type": "number",
            "description": "Effective DRM base fee per library per month",
            "format": "decimal"
          },
          "DefaultBaseFeePerLibraryMonth": {
            "type": "number",
            "description": "Public list DRM base fee per library per month",
            "format": "decimal"
          },
          "LicenseCost": {
            "type": "number",
            "description": "Effective per-license cost, if overridden",
            "format": "decimal",
            "nullable": true
          },
          "DefaultLicenseCost": {
            "type": "number",
            "description": "Public list per-license cost",
            "format": "decimal"
          }
        }
      },
      "TieredUnitPriceModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "PricePerUnit": {
            "type": "number",
            "description": "Effective flat price per unit. Null when the customer is on tiered pricing (see Tiers)",
            "format": "decimal",
            "nullable": true
          },
          "DefaultPricePerUnit": {
            "type": "number",
            "description": "Public list price per unit. Null when there is no known list price for this product",
            "format": "decimal",
            "nullable": true
          },
          "Unit": {
            "type": "string",
            "description": "The unit the price applies to, e.g. \"minute\" or \"1M queries\"",
            "nullable": true
          },
          "IsOverridden": {
            "type": "boolean",
            "description": "Whether the customer has an explicit override (flat or tiered)"
          },
          "Tiers": {
            "type": "array",
            "description": "Pricing tiers, populated when the customer is on tiered pricing for this product",
            "nullable": true,
            "items": {
              "$ref": "#/components/schemas/PricingTierModel"
            }
          }
        }
      },
      "EdgeScriptingPricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "RequestsPerMillion": {
            "type": "number",
            "description": "Effective price per 1M requests",
            "format": "decimal"
          },
          "DefaultRequestsPerMillion": {
            "type": "number",
            "description": "Public list price per 1M requests",
            "format": "decimal"
          },
          "RequestsIsOverridden": {
            "type": "boolean",
            "description": "Whether requests pricing is overridden"
          },
          "CpuPer1000Seconds": {
            "type": "number",
            "description": "Effective CPU price per 1000 seconds",
            "format": "decimal"
          },
          "DefaultCpuPer1000Seconds": {
            "type": "number",
            "description": "Public list CPU price per 1000 seconds",
            "format": "decimal"
          },
          "CpuIsOverridden": {
            "type": "boolean",
            "description": "Whether CPU pricing is overridden"
          }
        }
      },
      "BunnyDbPricingModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "ColdStorage": {
            "description": "Cold storage price per GB per month",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TieredUnitPriceModel"
              }
            ]
          },
          "ActiveStorage": {
            "description": "Active (replica) storage price per GB per month",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TieredUnitPriceModel"
              }
            ]
          },
          "RowReads": {
            "description": "Row reads price per billion reads",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TieredUnitPriceModel"
              }
            ]
          },
          "RowWrites": {
            "description": "Row writes price per million writes",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TieredUnitPriceModel"
              }
            ]
          }
        }
      },
      "InvitePartnerCustomerRequest": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "Email"
        ],
        "properties": {
          "Email": {
            "type": "string",
            "description": "Email of the existing bunny.net user to invite as a customer.",
            "format": "email",
            "minLength": 1
          }
        }
      },
      "PartnerCustomerListItemModel": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "Id": {
            "type": "integer",
            "description": "Primary key of the partner-customer relationship row",
            "format": "int64"
          },
          "CustomerUserId": {
            "type": "string",
            "description": "User id of the customer",
            "nullable": true
          },
          "Email": {
            "type": "string",
            "description": "Email of the customer",
            "nullable": true
          },
          "CompanyName": {
            "type": "string",
            "description": "Company name of the customer, if set on their account",
            "nullable": true
          },
          "ContractBillingType": {
            "description": "Billing type agreed in the contract with the partner. Null if no contract is set\n\n1 = Pay As You Go\n2 = Post Paid",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/PartnerContractBillingType"
              }
            ]
          },
          "ContractValue": {
            "type": "number",
            "description": "Contract value agreed with the partner.",
            "format": "decimal",
            "nullable": true
          },
          "Currency": {
            "description": "Currency of the contract value.\n\n0 = US Dollar\n1 = Euro",
            "nullable": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/PartnerCustomerContractCurrency"
              }
            ]
          },
          "ContractStartDate": {
            "type": "string",
            "description": "Contract start date.",
            "format": "date-time",
            "nullable": true
          },
          "ContractEndDate": {
            "type": "string",
            "description": "Contract end date.",
            "format": "date-time",
            "nullable": true
          }
        }
      }
    },
    "securitySchemes": {
      "AccessKey": {
        "type": "apiKey",
        "description": "API Access Key authorization header",
        "name": "AccessKey",
        "in": "header"
      },
      "bearer": {
        "type": "apiKey",
        "description": "Bearer token authorization header",
        "name": "Authorization",
        "in": "header"
      }
    }
  },
  "tags": [
    {
      "name": "Customers"
    },
    {
      "name": "Audit Log"
    },
    {
      "name": "Contract"
    },
    {
      "name": "Billing"
    },
    {
      "name": "Pricing"
    },
    {
      "name": "Products"
    }
  ]
}