{
  "openapi": "3.0.4",
  "info": {
    "title": "Starlink Public API",
    "description": "<h3>Description</h3>API to manage Starlink accounts and devices. For interactive endpoints list see: <a href='https://starlink.readme.io/'>https://starlink.readme.io/</a><h3>Authentication - OIDC</h3><p>To authenticate with this API using OIDC, <a target='_blank' href='/api/auth/.well-known/openid-configuration'>Well Known URL</a> and attach the result to your requests with the <strong>Authorize</strong> button below.</p>",
    "version": "2"
  },
  "servers": [
    {
      "url": "/api"
    }
  ],
  "paths": {
    "/public/v2/account": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get account information",
        "description": "Required permission: Account information, View.",
        "responses": {
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Account retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountResponseV2ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/data-usage/query": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "Query data usage",
        "description": "Required permission: Service plan, View.<br/>Retrieve the real-time data tracking info for this account's data usage. For detailed instructions, please refer to the API documentation: https://starlink.readme.io/docs/data-usage-api",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Index of page to get.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Amount of service lines to retrieve per page. Defaults to 50, can request up to 250.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "requestBody": {
          "description": "Data usage query filters",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QueryDataUsageRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully retrieved data usage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceLineDataUsageForBillingCyclesPaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to query data usage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/products": {
      "get": {
        "tags": [
          "Account"
        ],
        "summary": "Get products",
        "description": "Required permission: Service plan, View.<br/>Gets all products available to this account that could be assigned to service lines. Each product includes data block product info if compatible.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Index of page to get. Page size is 100",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint"
          },
          "200": {
            "description": "Subscription products retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionProductResponsePaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve subscriptions",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/addresses": {
      "get": {
        "tags": [
          "Addresses"
        ],
        "summary": "Get all addresses",
        "description": "Required permission: Account information, View.<br/>Returns all addresses on the account in paginated form.",
        "parameters": [
          {
            "name": "addressIds",
            "in": "query",
            "description": "Filter by a specific set of Address Reference IDs",
            "schema": {
              "type": "array",
              "items": {
                "type": "string",
                "format": "uuid"
              }
            }
          },
          {
            "name": "metadata",
            "in": "query",
            "description": "Filter by metadata",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "Index of page to get. Page size is 100",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Addresses retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddressResponsePaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve addresses",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Addresses"
        ],
        "summary": "Create address",
        "description": "Required permission: Account information, Edit.",
        "requestBody": {
          "description": "AddressCreateRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressCreateRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "201": {
            "description": "Address created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddressResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to create address",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddressResponseServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/addresses/{addressReferenceId}": {
      "get": {
        "tags": [
          "Addresses"
        ],
        "summary": "Get address",
        "description": "Required permission: Account information, View.",
        "parameters": [
          {
            "name": "addressReferenceId",
            "in": "path",
            "description": "Address reference ID",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "55ec6574-10d8-bd9c-1951-d4184f4ae467"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Address retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddressResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve address",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Addresses"
        ],
        "summary": "Update address",
        "description": "Required permission: Account information, Edit.",
        "parameters": [
          {
            "name": "addressReferenceId",
            "in": "path",
            "description": "Reference Id of address to update",
            "required": true,
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "55ec6574-10d8-bd9c-1951-d4184f4ae467"
          }
        ],
        "requestBody": {
          "description": "AddressUpdateRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddressUpdateRequestV2"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Address updated",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddressResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to update the address",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/billing/invoices": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Get invoice summaries",
        "description": "Required permission: Financial, View.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "The index of the page, starting at 0. Page size is 100",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Invoices retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceSummaryResponsePaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve invoices",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/billing/invoices/{invoiceId}": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Get invoice details",
        "description": "Required permission: Financial, View.",
        "parameters": [
          {
            "name": "invoiceId",
            "in": "path",
            "description": "The invoice identifier",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "INV-DF-US-1234ABCD"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Invoice retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceDetailResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve the invoice",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/billing/balance": {
      "get": {
        "tags": [
          "Billing"
        ],
        "summary": "Get account balance",
        "description": "Required permission: Financial, View.<br/>Response contains one balance for each currency. If all balances are 0 then response will contain a single entry with 0 balance and currency matching the default for this account.",
        "responses": {
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Balance retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountBalanceResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve the balance",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/contacts": {
      "get": {
        "tags": [
          "Contacts"
        ],
        "summary": "Get contacts",
        "description": "Required permission: User management, Edit.<br/>Get list of contacts on the authenticated user's account.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Page of contacts to query.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "200": {
            "description": "Contacts retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserResponsePaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve contacts.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "default": {
            "description": "Error"
          },
          "403": {
            "description": "user_lacks_required_permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserLacksRequiredPermissionServiceResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Contacts"
        ],
        "summary": "Create contact",
        "description": "Required permission: Admin Only - API User Management, Edit.<br/>Creates the contact if it is new, and adds the contact to the authenticated account.",
        "requestBody": {
          "description": "Contact information to be added to account.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateContactOnAccountRequest"
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized"
          },
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "200": {
            "description": "Contact has been created and added to the account with the requested roles.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to create the contact and add it to the account with the correct roles.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "403": {
            "description": "user_lacks_required_permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserLacksRequiredPermissionServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/contacts/{subjectId}": {
      "delete": {
        "tags": [
          "Contacts"
        ],
        "summary": "Delete contact",
        "description": "Required permission: Admin Only - API User Management, Edit.<br/>Deletes contact based on specified subject Id on the authenticated account.",
        "parameters": [
          {
            "name": "subjectId",
            "in": "path",
            "description": "Subject ID of contact to be deleted.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "200": {
            "description": "Contact successfully deleted from account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to delete contact.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "default": {
            "description": "Error"
          }
        }
      },
      "put": {
        "tags": [
          "Contacts"
        ],
        "summary": "Update contact",
        "description": "Required permission: Admin Only - API User Management, Edit.<br/>Update contact on the authenticated account.",
        "parameters": [
          {
            "name": "subjectId",
            "in": "path",
            "description": "Subject Id of the contact to be updated.",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Updates for contact.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateContactOnAccountRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "200": {
            "description": "Updated contact.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to update contact.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "default": {
            "description": "Error"
          },
          "403": {
            "description": "user_lacks_required_permission",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserLacksRequiredPermissionServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/data-pools": {
      "get": {
        "tags": [
          "Data Pools"
        ],
        "summary": "Pre-Release: Get all multi-service line enabled data pools.",
        "description": "Required permission: Service plan, View.<br/>This endpoint is available for select audiences only.",
        "parameters": [
          {
            "name": "productReferenceId",
            "in": "query",
            "description": "Filter by Product ID of the pool",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataPoolIds",
            "in": "query",
            "description": "Data pool IDs to filter by. Queries for all data pools on account if omitted",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The index of the page, starting at 0. Page size is 100",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DataPoolResponseV2PaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/data-pools/usage": {
      "get": {
        "tags": [
          "Data Pools"
        ],
        "summary": "Pre-Release: Query data pool usage with service line and monthly breakdowns.",
        "description": "Required permission: Service plan, View.<br/>This endpoint is available for select audiences only.",
        "parameters": [
          {
            "name": "dataPoolIds",
            "in": "query",
            "description": "Data pool Ids to filter by. Queries for usage of all data pools on account if omitted",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "asOfTimestamp",
            "in": "query",
            "description": "Optional timestamp for snapshotting data pool usage *as of* this time. Only includes data blocks\n            that are active at this instant (i.e., `StartDate <= asOfTimestamp < EndDate`).\n            Defaults to `DateTimeOffset.UtcNow` to return currently active blocks.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The index of the page, starting at 0.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Amount of data pool usage summaries to retrieve per page. Defaults to 50, can request up to 100.",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 50
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DataPoolUsageResponseV2PaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/data-pools/{dataPoolId}/set-automatic-top-up": {
      "post": {
        "tags": [
          "Data Pools"
        ],
        "summary": "Pre-Release: Enable or disable automatic top-up for a data pool.",
        "description": "Required permission: Service plan, Edit.<br/>This endpoint is available for select audiences only.",
        "parameters": [
          {
            "name": "dataPoolId",
            "in": "path",
            "description": "The data pool ID",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "enabled",
            "in": "query",
            "description": "Whether automatic top-up should be enabled (defaults to true)",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/flights/status": {
      "post": {
        "tags": [
          "Flights"
        ],
        "summary": "Post a flight event",
        "description": "Required permission: Aviation flight status management, Edit.<br/>Post a real-time flight event on a Starlink-enabled plane. This endpoint is only accessible from an aviation account.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StarlinkFlightRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          },
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/managed/customers": {
      "post": {
        "tags": [
          "Managed"
        ],
        "summary": "Create a managed customer account",
        "description": "This endpoint is only callable with an authorized provider account.",
        "requestBody": {
          "description": "CreateManagedCustomerRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateManagedCustomerRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden from creating customer accounts"
          },
          "200": {
            "description": "Successfully created customer account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateManagedCustomerResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to create customer account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/managed/accounts/tree": {
      "get": {
        "tags": [
          "Managed Accounts"
        ],
        "summary": "Pre-Release: Get managed account tree",
        "description": "Required permission: Managed Account Information, View.<br/>Gets the entire managed account hierarchy beneath the calling account.\n            \nThis endpoint is available for select audiences only.",
        "parameters": [
          {
            "name": "ancestorAccountNumber",
            "in": "query",
            "description": "The root account number to build the tree from. If not provided, uses the token's account.\n             This account number must be in the hierarchy underneath the calling account.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "200": {
            "description": "Account tree retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ManagedAccountTreeResponseV2ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve managed account tree",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/managed/accounts": {
      "get": {
        "tags": [
          "Managed Accounts"
        ],
        "summary": "Pre-Release: Query managed accounts",
        "description": "Required permission: Managed Account Information, View.<br/>Query managed accounts within your account hierarchy with filtering and pagination support.\nReturns up to 100 accounts at at time.\n            \nThis endpoint is available for select audiences only.",
        "parameters": [
          {
            "name": "ancestorAccountNumber",
            "in": "query",
            "description": "Query accounts under this ancestor account number.\n             Defaults to calling token's account if not provided.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "searchString",
            "in": "query",
            "description": "Filter by account name or number (prefix match)",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "accountNumbers",
            "in": "query",
            "description": "Get specific accounts by account numbers",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "maxDepth",
            "in": "query",
            "description": "Maximum depth in hierarchy (1 = direct children only, 2 = children +\n             grandchildren, 3 = children through great-grandchildren, etc. null for all\n             descendants.)",
            "schema": {
              "type": "integer",
              "format": "int32"
            }
          },
          {
            "name": "cursor",
            "in": "query",
            "description": "Pagination cursor for fetching next page",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Managed accounts retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountQueryResponseV2KeyPaginatedStringServiceResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing\n             required permission for this endpoint or resource",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to\n             query managed accounts",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/mobile/radio-access-network/{timestamp}": {
      "get": {
        "tags": [
          "Mobile"
        ],
        "summary": "Get Radio Access Network Data",
        "description": "Required permission: Gated Feature - Starlink Mobile Data, View.<br/>Gets Radio Access Network (RAN) data. Data is partitioned by timestamp_date, timestamp_hour. Only able to get data from one hour per request. Data from the timestamp date and hour supplied will be returned, ignoring minutes and seconds.",
        "parameters": [
          {
            "name": "timestamp",
            "in": "path",
            "description": "Timestamp of target data aggregated by the hour for the selected hour",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2026-06-15T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MobileRanResponseListServiceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/mobile/timeseries/{timestamp}": {
      "get": {
        "tags": [
          "Mobile"
        ],
        "summary": "Get Timeseries Data of Starlink Mobile Usage and Beam Reliability",
        "description": "Required permission: Gated Feature - Starlink Mobile Data, View.<br/>Gets Timeseries data. Data is partitioned by timestamp_date, timestamp_hour. Only able to get data from one hour per request. Data from the timestamp date and hour supplied will be returned, ignoring minutes and seconds.",
        "parameters": [
          {
            "name": "timestamp",
            "in": "path",
            "description": "Timestamp of target data aggregated by the hour for the selected hour",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2026-06-15T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MobileTimeSeriesResponseListServiceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/mobile/map/{timestamp}": {
      "get": {
        "tags": [
          "Mobile"
        ],
        "summary": "Get Map Data",
        "description": "Required permission: Gated Feature - Starlink Mobile Data, View.<br/>Gets Map data. Data is partitioned by timestamp_date, timestamp_hour. Only able to get data from one hour per request. Data from the timestamp date and hour supplied will be returned, ignoring minutes and seconds.",
        "parameters": [
          {
            "name": "timestamp",
            "in": "path",
            "description": "Timestamp of target data aggregated by the hour for the selected hour",
            "required": true,
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2026-06-15T00:00:00Z"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MobileMapResponseListServiceResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found"
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/routers/{routerId}": {
      "get": {
        "tags": [
          "Routers"
        ],
        "summary": "Get router",
        "description": "Required permission: Device management, View.",
        "parameters": [
          {
            "name": "routerId",
            "in": "path",
            "description": "Router Id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "010000000000000000012345"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "RouterResponse",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RouterResponseV2ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to get router",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/routers/configs": {
      "get": {
        "tags": [
          "Routers"
        ],
        "summary": "Get all router configs",
        "description": "Required permission: Device command and configuration, View.<br/>Return all router configs on this account in paginated form",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Index of page to get. Page size is 100",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Paginated RouterConfigResponse",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RouterConfigResponseV2PaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Routers"
        ],
        "summary": "Create router config",
        "description": "Required permission: Device command and configuration, Edit.",
        "requestBody": {
          "description": "RouterConfigRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RouterConfigRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RouterConfigResponseV2ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to create router config",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "200": {
            "description": "Success"
          }
        }
      }
    },
    "/public/v2/routers/configs/{configId}": {
      "get": {
        "tags": [
          "Routers"
        ],
        "summary": "Get router config",
        "description": "Required permission: Device command and configuration, View.",
        "parameters": [
          {
            "name": "configId",
            "in": "path",
            "description": "Config Id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "DVC_CFG-12341234"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "RouterConfigResponse",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RouterConfigResponseV2ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Routers"
        ],
        "summary": "Update router config",
        "description": "Required permission: Device command and configuration, Edit.<br/>Update a given router config. Any router assigned to this config will immediately receive the update if it is online. Otherwise, the router will receive the update when it comes online.",
        "parameters": [
          {
            "name": "configId",
            "in": "path",
            "description": "Config Id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "DVC_CFG-12341234"
          }
        ],
        "requestBody": {
          "description": "RouterConfigRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RouterConfigRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "RouterConfigResponse",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RouterConfigResponseV2ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to update router config",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/routers/configs/assign": {
      "put": {
        "tags": [
          "Routers"
        ],
        "summary": "Router config assignment",
        "description": "Required permission: Device configuration assignment, Edit.<br/>Assign the config (or none) to the routers. For each router if it is currently online, the config will immediately be sent to the router. Else, the config will be sent to the router when it comes online. Configs are sent to the router within 1-2 minutes. On error no assignment occurs.",
        "requestBody": {
          "description": "Request containing config id (or empty) and list of deviceId's to assign to",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignRoutersConfigRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/routers/configs/default": {
      "get": {
        "tags": [
          "Routers"
        ],
        "summary": "Get default router config",
        "description": "Required permission: Device command and configuration, View.<br/>Gets the router config id that will be assigned to any routers when they are first added to this account.",
        "responses": {
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefaultRouterConfigResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to get default router config",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "put": {
        "tags": [
          "Routers"
        ],
        "summary": "Set default router config",
        "description": "Required permission: Device configuration assignment, Edit.<br/>Set the default router config on the account. Use an empty string to remove the default config from the account. Any NEW routers on this account will be assigned this config.",
        "requestBody": {
          "description": "UpdateDefaultConfigRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateDefaultConfigRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Updated default config",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to set config as account default",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/routers/configs/tls": {
      "get": {
        "tags": [
          "Routers"
        ],
        "summary": "Get TLS configs",
        "description": "Required permission: Device command and configuration, View.<br/>Gets a paginated list of TLS configs on this account.",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "description": "Index of page to get. Page size is 100",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TlsConfigResponseV2PaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to get TLS configs",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Routers"
        ],
        "summary": "Create TLS config",
        "description": "Required permission: Device command and configuration, Edit.<br/>Creates a TLS config that allows this certificate and key to be used in router configs when a certificate and key are required by only specifying the certificate (matching key will be added). TLS configs are identified by their certificate string base64 encoded which must be unique on the account.",
        "requestBody": {
          "description": "Request containing certificate and key, both in base64 encoded pem format",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TlsConfigCreateRequestV2"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "201": {
            "description": "Created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DefaultRouterConfigResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to create TLS config. Certificates must be unique.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "200": {
            "description": "Success"
          }
        }
      },
      "delete": {
        "tags": [
          "Routers"
        ],
        "summary": "Delete TLS config",
        "description": "Required permission: Device command and configuration, Edit.<br/>Deletes a TLS certificate and key pair from the set of TLS configs that can be reused when saving router configs and only specifying the certificate. Does not affect any router configs that were already saved, just removes it from list of certificates that the matching key will be inserted on save for.",
        "requestBody": {
          "description": "Request containing certificate and key, both in base64 encoded pem format",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteTlsConfigRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to delete TLS config",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/routers/local-content": {
      "post": {
        "tags": [
          "Routers"
        ],
        "summary": "Upload router local content file",
        "description": "Required permission: Device command and configuration, Edit.<br/>Upload html file to allow it to be configured as the HTTPS server local content file for router configs. File must be HTML, under 4MB, and file name under 100 characters. Files are stored in a public bucket for configured routers to download. File should be attached as multipart/form-data. See https://starlink.readme.io/docs/local-content for example upload script.",
        "requestBody": {
          "content": {
            "multipart/form-data": {
              "schema": {
                "required": [
                  "File"
                ],
                "type": "object",
                "properties": {
                  "File": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "File": {
                  "style": "form"
                }
              }
            },
            "application/json": {
              "schema": {
                "required": [
                  "File"
                ],
                "type": "object",
                "properties": {
                  "File": {
                    "type": "string",
                    "format": "binary"
                  }
                }
              },
              "encoding": {
                "File": {
                  "style": "form"
                }
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "201": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AddRouterLocalContentResponseV2ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to upload local content file",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "get": {
        "tags": [
          "Routers"
        ],
        "summary": "Get list of router local content files",
        "description": "Required permission: Device command and configuration, View.",
        "responses": {
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RouterLocalContentResponseListServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Error getting list of router local content files.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/routers/sandbox/clients": {
      "get": {
        "tags": [
          "Routers"
        ],
        "summary": "Get sandbox clients",
        "description": "Required permission: Device command and configuration, View.<br/>Returns clients that were unsandboxed through the management API and have access that has not yet expired, paginated 1000 at a time. Clients that are allowed internet access due to sandbox disablement are not returned.",
        "parameters": [
          {
            "name": "sandboxId",
            "in": "query",
            "description": "Sandbox Id",
            "schema": {
              "type": "integer",
              "format": "int32"
            },
            "example": 123
          },
          {
            "name": "expiryAfter",
            "in": "query",
            "description": "Include clients whose access expires after this time",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2020-01-01T01:00:00+00:00"
          },
          {
            "name": "page",
            "in": "query",
            "description": "Index of page to get. Page size is 1000",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            },
            "example": 0
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SandboxClientResponsePaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to get sandbox clients",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Routers"
        ],
        "summary": "Batch update sandbox clients",
        "description": "Required permission: Device command and configuration, Edit.<br/>Update the sandbox state for multiple clients. If sandboxing is enabled, sandboxed clients will only have access to domains in the sandbox domain allow list. If a client is duplicated, records the client with the latest expiry.",
        "requestBody": {
          "description": "UpdateSandboxClientRequest",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/UpdateBatchSandboxClientRequest"
                }
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to update sandbox clients",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/routers/sandbox/heartbeat": {
      "put": {
        "tags": [
          "Routers"
        ],
        "summary": "Update sandbox heartbeat",
        "description": "Required permission: Device command and configuration, Edit.<br/>Heartbeats verify the health of enterprise systems that manage router sandboxing. If heartbeats are not received for an account, Starlink API will instruct routers under the account disable sandboxes until reboot.",
        "requestBody": {
          "description": "SandboxHeartbeatRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SandboxHeartbeatRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to send heartbeat"
          }
        }
      }
    },
    "/public/v2/routers/{routerId}/reboot": {
      "post": {
        "tags": [
          "Routers"
        ],
        "summary": "Reboot router",
        "description": "Required permission: Device command and configuration, Edit.",
        "parameters": [
          {
            "name": "routerId",
            "in": "path",
            "description": "Router Id",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "010000000000000000012345"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to reboot router.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}": {
      "get": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Get service line",
        "description": "Required permission: Service plan, View.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Service line retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceLineResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve the service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "delete": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Deactivate a service line",
        "description": "Required permission: Service plan, Edit.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          },
          {
            "name": "reasonForCancellation",
            "in": "query",
            "description": "Optional reason for cancelling this service line",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "endNow",
            "in": "query",
            "description": "If service should end now, or on next bill day. Default is false",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully deactivated the service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to deactivate the service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines": {
      "get": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Get all service lines",
        "description": "Required permission: Service plan, View.",
        "parameters": [
          {
            "name": "addressReferenceId",
            "in": "query",
            "description": "Filter by an Address Reference ID",
            "schema": {
              "type": "string",
              "format": "uuid"
            },
            "example": "55ec6574-10d8-bd9c-1951-d4184f4ae467"
          },
          {
            "name": "searchString",
            "in": "query",
            "description": "Filter by fuzzy match of nickname, or exact match on UT ID, UT nickname, UT serial number, or service line number",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "dataPoolId",
            "in": "query",
            "description": "Filter for service lines on a given data pool",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The index of the page, starting at 0. Page size is 100",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          },
          {
            "name": "orderByCreatedDateDescending",
            "in": "query",
            "description": "Sort the paginated results by created date",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden from retrieving service lines for this account"
          },
          "200": {
            "description": "Service lines retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceLineResponsePaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve service lines",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Create service line",
        "description": "Required permission: Service plan, Edit.<br/>Service line must be linked to an address and a subscription/product-ID, and can optionally be immediately configured with data blocks.",
        "requestBody": {
          "description": "ServiceLineCreateRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceLineCreateRequestV2"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden from creating service line on this account"
          },
          "201": {
            "description": "Service line created",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceLineResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to create service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/nickname": {
      "put": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Set service line nickname",
        "description": "Required permission: Service plan, Edit.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          }
        ],
        "requestBody": {
          "description": "ServiceLineUpdateNicknameRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceLineUpdateNicknameRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully updated service line nickname",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to update service line nickname",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/product": {
      "put": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Update service line product",
        "description": "Required permission: Service plan, Edit.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          }
        ],
        "requestBody": {
          "description": "The recurring data blocks to set on the new product, if it on a compatible product. Leave null if otherwise.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateServiceLineProductRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully updated service line product",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to update service line product",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/public-ip": {
      "put": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Set service line public IP setting",
        "description": "Required permission: Device command and configuration, Edit.<br/>Enable or disable public ip setting on a service line",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          }
        ],
        "requestBody": {
          "description": "ServiceLineSetPublicIpRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ServiceLineSetPublicIpRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully set public IP setting",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to set public IP setting",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/data/opt-in": {
      "post": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Opt in priority data",
        "description": "Required permission: Service plan, Edit.<br/>Opt in the service line to continue using priority data after reaching the plan capacity. Only applies to some products.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully opted in service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OptInResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to opt in service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/data/opt-out": {
      "post": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Opt out priority data",
        "description": "Required permission: Service plan, Edit.<br/>Opt out the service line from continuing to use priority data even when plan capacity is exceeded. If the service line reaches the plan capacity, it will switch to using standard data. Only applies to some products.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully opted out service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OptInResponseServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to opt out service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/user-terminals": {
      "post": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Add user terminal to service line",
        "description": "Required permission: Service plan, Edit.<br/>User terminal must already be on the account. See POST /v2/user-terminals to add user terminal to account.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          }
        ],
        "requestBody": {
          "description": "DeviceIdRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceIdRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "User terminals added to service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to add the user terminal to the service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/user-terminals/{deviceId}": {
      "delete": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Remove user terminal from service line",
        "description": "Required permission: Service plan, Edit.<br/>This removes the user terminal from the service line, but it remains on the account and can be added to another service line. This clears any L2VPN circuits configured for the terminal.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          },
          {
            "name": "deviceId",
            "in": "path",
            "description": "User terminal ID, kit serial number, or dish serial number.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345678-12345678-12345678"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Removed user terminal from service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to remove user terminal from service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/data/recurring": {
      "put": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Set recurring data blocks on service line",
        "description": "Required permission: Service plan, Edit.<br/>Service line must be on a top up plan",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "SetRecurringBlocksRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RecurringDataBlocksRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully set recurring blocks on service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to set service line recurring data blocks",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/data/top-up": {
      "post": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Adds one-time top up data block to service line",
        "description": "Required permission: Service plan, Edit.<br/>Service line must be on a top up plan",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "The service line number",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "The request object",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AddDataBlockRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully added data block",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to update add data block to service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/billing-cycles/partial-periods": {
      "get": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Get billing partial periods",
        "description": "Required permission: Service plan, View.<br/>Get the previous billing partial periods for this service line. For more information about this endpoint, see https://starlink.readme.io/docs/understanding-proration.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully retrieved partial periods",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PartialPeriodResponseListServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve partial periods",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/service-lines/{serviceLineNumber}/consume-from-pool": {
      "patch": {
        "tags": [
          "Service Lines"
        ],
        "summary": "Pre-Release: Set whether a service line should consume from a data pool.",
        "description": "Required permission: Service plan, Edit.<br/>This endpoint is available for select audiences only.",
        "parameters": [
          {
            "name": "serviceLineNumber",
            "in": "path",
            "description": "Service line number",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "AST-511274-31364-54"
          },
          {
            "name": "consumeFromPool",
            "in": "query",
            "description": "Whether the service line should consume from pool, defaults to true",
            "schema": {
              "type": "boolean",
              "default": true
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully updated service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to update service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/user-terminals": {
      "get": {
        "tags": [
          "User Terminals"
        ],
        "summary": "Get all user terminals",
        "description": "Required permission: Device management, View.<br/>Gets all user terminals on the account, filtered by the optional filter parameters, in paginated form",
        "parameters": [
          {
            "name": "serviceLineNumbers",
            "in": "query",
            "description": "Filter by a set of service line numbers",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "userTerminalIds",
            "in": "query",
            "description": "Filter by a set of user terminal IDs",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          {
            "name": "hasServiceLine",
            "in": "query",
            "description": "Filter by user terminals with or without a services lines. Omitting this will return both sets",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "name": "searchString",
            "in": "query",
            "description": "Filter by partial match of user terminal ID, serial number, or kit serial number",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "page",
            "in": "query",
            "description": "The index of the page, starting at 0. Page size is 100",
            "schema": {
              "type": "integer",
              "format": "int32",
              "default": 0
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "User terminals retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserTerminalResponseV2PaginatedServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve user terminals",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      },
      "post": {
        "tags": [
          "User Terminals"
        ],
        "summary": "Add user terminal to account",
        "description": "Required permission: Device management, Edit.<br/>This will add the user terminal to the account, but won't start service. User terminals must be present on the account before adding to a service line.",
        "requestBody": {
          "description": "DeviceIdRequest",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeviceIdRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "User terminal added to account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to add user terminal to the account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/user-terminals/{deviceId}": {
      "delete": {
        "tags": [
          "User Terminals"
        ],
        "summary": "Remove user terminal from account",
        "description": "Required permission: Device management, Edit.<br/>User terminal must already be removed from service lines before it can be removed from the account. See /v2/service-lines/{serviceLineNumber}/user-terminals/{deviceId}",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "description": "User terminal ID, kit serial number, or dish serial number.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345678-12345678-12345678"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Removed user terminal from service line",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to remove user terminal from account",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/user-terminals/{deviceId}/reboot": {
      "post": {
        "tags": [
          "User Terminals"
        ],
        "summary": "Reboot user terminal",
        "description": "Required permission: Device command and configuration, Edit.",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "description": "User terminal ID, kit serial number, or dish serial number.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345678-12345678-12345678"
          }
        ],
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to reboot user terminal",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/user-terminals/configs/assign": {
      "put": {
        "tags": [
          "User Terminals"
        ],
        "summary": "User terminal config assignment",
        "description": "Required permission: Device configuration assignment, Edit.<br/>Assign the config (or none) to the user terminals. For each terminal if it is currently online, the config will immediately be sent. Else, the config will be sent when it comes online. On error no assignment occurs. Currently terminal configIds are only visible on starlink website.",
        "requestBody": {
          "description": "Request containing config id (or empty) and list of userTerminalIds to assign to",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssignUserTerminalsConfigRequest"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad request. Invalid or missing parameter"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden, either you don't have access to the account or a terminal or config is not on the account."
          },
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Content",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/user-terminals/l2vpn": {
      "get": {
        "tags": [
          "User Terminals"
        ],
        "summary": "Get L2VPN circuits available for this account",
        "description": "Required permission: Device command and configuration, View.",
        "responses": {
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Available circuits retrieved",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/L2VpnCircuitResponseListServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to retrieve circuits",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    },
    "/public/v2/user-terminals/{deviceId}/l2vpn": {
      "put": {
        "tags": [
          "User Terminals"
        ],
        "summary": "Set L2VPN VLANs for user terminal",
        "description": "Required permission: Device configuration assignment, Edit.<br/>Terminal must be on subscription that allows L2VPN. Maximum 2 circuits per Starlink PoP. Use null or empty circuit list to clear all L2VPN circuits for terminal. See /user-terminals/available-circuits for all configurable circuits and associated Starlink PoP.",
        "parameters": [
          {
            "name": "deviceId",
            "in": "path",
            "description": "User terminal ID, kit serial number, or dish serial number.",
            "required": true,
            "schema": {
              "type": "string"
            },
            "example": "12345678-12345678-12345678"
          }
        ],
        "requestBody": {
          "description": "List of circuits and associated VLAN tags to assign to user terminal. Terminal must be on a service line with subscription that allows L2VPN.",
          "content": {
            "application/json": {
              "schema": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/L2VpnSetCircuitRequest"
                }
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request"
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Missing required permission for this endpoint or resource"
          },
          "200": {
            "description": "Successfully assigned circuits",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          },
          "422": {
            "description": "Failed to assign circuits",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AccountBalanceResponse": {
        "type": "object",
        "properties": {
          "balances": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CurrencyBalanceResponse"
            },
            "description": "The account balance for each currency owed. If nothing is owed, a single zero balance in the account's currency is returned."
          }
        },
        "additionalProperties": false
      },
      "AccountBalanceResponseServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/AccountBalanceResponse"
          }
        },
        "additionalProperties": false
      },
      "AccountQueryResponseV2": {
        "type": "object",
        "properties": {
          "accountNumber": {
            "type": "string",
            "description": "The Account Number. Example: ACC-511274-31364-54"
          },
          "regionCode": {
            "type": "string",
            "description": "The region code of the account. Example: US"
          },
          "accountName": {
            "type": "string",
            "description": "The name of the account"
          }
        },
        "additionalProperties": false
      },
      "AccountQueryResponseV2KeyPaginatedString": {
        "type": "object",
        "properties": {
          "nextKey": {
            "type": "string",
            "description": "The next key that should be provided to the cursor parameter to fetch the next page, or null if this is the last page.",
            "nullable": true
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AccountQueryResponseV2"
            },
            "description": "Results for this page."
          }
        },
        "additionalProperties": false
      },
      "AccountQueryResponseV2KeyPaginatedStringServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/AccountQueryResponseV2KeyPaginatedString"
          }
        },
        "additionalProperties": false
      },
      "AccountResponseV2": {
        "type": "object",
        "properties": {
          "accountNumber": {
            "type": "string",
            "description": "The Account Number. Example: ACC-511274-31364-54"
          },
          "regionCode": {
            "type": "string",
            "description": "The region code of the account. Example: US"
          },
          "accountName": {
            "type": "string",
            "description": "The name of the account",
            "nullable": true
          },
          "activeSuspensions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Active suspensions on account",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AccountResponseV2ServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/AccountResponseV2"
          }
        },
        "additionalProperties": false
      },
      "AddDataBlockRequest": {
        "required": [
          "count",
          "productId"
        ],
        "type": "object",
        "properties": {
          "productId": {
            "minLength": 1,
            "type": "string",
            "description": "Product Id for data blocks"
          },
          "count": {
            "type": "integer",
            "description": "Quantity of the specified data block to add",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "AddRouterLocalContentResponseV2": {
        "required": [
          "fileContentHash",
          "fileContentId",
          "nickname"
        ],
        "type": "object",
        "properties": {
          "nickname": {
            "minLength": 1,
            "type": "string",
            "description": "File name of uploaded file"
          },
          "fileContentId": {
            "minLength": 1,
            "type": "string",
            "description": "File id to go in router config HTTPS server FileContentId field"
          },
          "fileContentHash": {
            "minLength": 1,
            "type": "string",
            "description": "File MD5 hash to go in router config HTTPS server FileContentHash field"
          }
        },
        "additionalProperties": false
      },
      "AddRouterLocalContentResponseV2ServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/AddRouterLocalContentResponseV2"
          }
        },
        "additionalProperties": false
      },
      "AddressCreateRequest": {
        "required": [
          "addressLines",
          "formattedAddress",
          "latitude",
          "longitude"
        ],
        "type": "object",
        "properties": {
          "addressLines": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The address lines for the address. Example: 1 Rocket Road"
          },
          "locality": {
            "type": "string",
            "description": "The town/locality of the address. Example: Hawthorne",
            "nullable": true
          },
          "administrativeArea": {
            "type": "string",
            "description": "The administrative area of the address. Example: California",
            "nullable": true
          },
          "administrativeAreaCode": {
            "type": "string",
            "description": "Deprecated field: value will be ignored. Administrative area code will be determined from latitude and longitude.",
            "nullable": true,
            "deprecated": true
          },
          "region": {
            "type": "string",
            "description": "The region of the address. Example: United States",
            "nullable": true
          },
          "regionCode": {
            "type": "string",
            "description": "Deprecated field: value will be ignored. Region Code will be determined from latitude and longitude.",
            "nullable": true,
            "deprecated": true
          },
          "postalCode": {
            "type": "string",
            "description": "The postal code of the address. Example: 90250-6844",
            "nullable": true
          },
          "metadata": {
            "type": "string",
            "description": "Optional field that can be used to store information about the address for external purposes",
            "nullable": true
          },
          "formattedAddress": {
            "minLength": 1,
            "type": "string",
            "description": "A user readable address. Example: 1 Rocket Road, Hawthorne, CA 90250-6844, US"
          },
          "latitude": {
            "type": "number",
            "description": "The required latitude of the address. Example: 33.92",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "The required longitude of the address. Example: -118.32",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "AddressResponse": {
        "type": "object",
        "properties": {
          "addressReferenceId": {
            "type": "string",
            "description": "Reference identifier for address. Example: 55ec6574-10d8-bd9c-1951-d4184f4ae467",
            "format": "uuid"
          },
          "addressLines": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The address lines for the address. Example: 1 Rocket Road"
          },
          "locality": {
            "type": "string",
            "description": "The town/locality of the address. Example: Hawthorne",
            "nullable": true
          },
          "administrativeArea": {
            "type": "string",
            "description": "The administrative area of the address. Example: California",
            "nullable": true
          },
          "administrativeAreaCode": {
            "type": "string",
            "description": "The administrative area code of the address. Example: CA"
          },
          "region": {
            "type": "string",
            "description": "The region of the address. Example: United States",
            "nullable": true
          },
          "regionCode": {
            "type": "string",
            "description": "The region code of the address. Example: US"
          },
          "postalCode": {
            "type": "string",
            "description": "The postal code of the address. Example: 90250"
          },
          "metadata": {
            "type": "string",
            "description": "Optional field that can be used to store information about the address for external purposes",
            "nullable": true
          },
          "formattedAddress": {
            "type": "string",
            "description": "A user readable address. Example: 1 Rocket Road, Hawthorne, CA 90250-6844, US"
          },
          "latitude": {
            "type": "number",
            "description": "The latitude of the address: Example 33.92",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "The longitude of the address. Example: -118.32",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "AddressResponsePaginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AddressResponse"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "AddressResponsePaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/AddressResponsePaginated"
          }
        },
        "additionalProperties": false
      },
      "AddressResponseServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/AddressResponse"
          }
        },
        "additionalProperties": false
      },
      "AddressUpdateRequestV2": {
        "required": [
          "addressLines",
          "formattedAddress",
          "latitude",
          "longitude"
        ],
        "type": "object",
        "properties": {
          "addressLines": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The address lines for the address. Example: 1 Rocket Road"
          },
          "locality": {
            "type": "string",
            "description": "The town/locality of the address. Example: Hawthorne",
            "nullable": true
          },
          "administrativeArea": {
            "type": "string",
            "description": "The administrative area of the address. Example: California",
            "nullable": true
          },
          "administrativeAreaCode": {
            "type": "string",
            "description": "Deprecated field: value will be ignored. Administrative area code will be determined from latitude and longitude.",
            "nullable": true,
            "deprecated": true
          },
          "region": {
            "type": "string",
            "description": "The region of the address. Example: United States",
            "nullable": true
          },
          "regionCode": {
            "type": "string",
            "description": "Deprecated field: value will be ignored. Region Code will be determined from latitude and longitude.",
            "nullable": true,
            "deprecated": true
          },
          "postalCode": {
            "type": "string",
            "description": "The postal code of the address. Example: 90250-6844",
            "nullable": true
          },
          "metadata": {
            "type": "string",
            "description": "Optional field that can be used to store information about the address for external purposes",
            "nullable": true
          },
          "formattedAddress": {
            "minLength": 1,
            "type": "string",
            "description": "A user readable address. Example: 1 Rocket Road, Hawthorne, CA 90250-6844, US"
          },
          "latitude": {
            "type": "number",
            "description": "The required latitude of the address. Example: 33.92",
            "format": "double"
          },
          "longitude": {
            "type": "number",
            "description": "The required longitude of the address. Example: -118.32",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "AirportCode": {
        "type": "object",
        "properties": {
          "airportIataCode": {
            "maxLength": 3,
            "minLength": 3,
            "type": "string",
            "description": "3 character string representing airport code in IATA format.",
            "nullable": true
          },
          "airportIcaoCode": {
            "maxLength": 4,
            "minLength": 4,
            "type": "string",
            "description": "4 character string representing airport code in ICAO format.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "AssignRoutersConfigRequest": {
        "required": [
          "routerIds"
        ],
        "type": "object",
        "properties": {
          "configId": {
            "type": "string",
            "description": "Config id (or none) to assign to routers",
            "nullable": true
          },
          "routerIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "RouterIds to immediately update"
          }
        },
        "additionalProperties": false
      },
      "AssignUserTerminalsConfigRequest": {
        "required": [
          "userTerminalIds"
        ],
        "type": "object",
        "properties": {
          "configId": {
            "type": "string",
            "description": "Config id (or none) to assign to user terminals",
            "nullable": true
          },
          "userTerminalIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "UserTerminalIds to immediately update"
          }
        },
        "additionalProperties": false
      },
      "AviationMetadataResponse": {
        "type": "object",
        "properties": {
          "tailNumber": {
            "type": "string",
            "nullable": true
          },
          "seatCount": {
            "type": "integer",
            "format": "int32"
          },
          "airlineIataCode": {
            "type": "string",
            "nullable": true
          },
          "aircraftIataCode": {
            "type": "string",
            "nullable": true
          },
          "airlineIcaoCode": {
            "type": "string",
            "nullable": true
          },
          "aircraftIcaoCode": {
            "type": "string",
            "nullable": true
          },
          "stcNumber": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateContactOnAccountRequest": {
        "required": [
          "email",
          "firstName",
          "lastName",
          "locale",
          "phoneNumber",
          "roles"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "minLength": 1,
            "type": "string",
            "description": "Contact first name."
          },
          "lastName": {
            "minLength": 1,
            "type": "string",
            "description": "Contact last name."
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Contact roles on account."
          },
          "email": {
            "minLength": 1,
            "type": "string",
            "description": "Contact email."
          },
          "phoneNumber": {
            "minLength": 1,
            "type": "string",
            "description": "Contact phone number."
          },
          "locale": {
            "minLength": 1,
            "type": "string",
            "description": "Contact locale."
          }
        },
        "additionalProperties": false
      },
      "CreateManagedCustomerRequest": {
        "required": [
          "email",
          "firstName",
          "lastName",
          "locale",
          "phone"
        ],
        "type": "object",
        "properties": {
          "firstName": {
            "minLength": 1,
            "type": "string",
            "description": "First name."
          },
          "lastName": {
            "minLength": 1,
            "type": "string",
            "description": "Last name."
          },
          "email": {
            "minLength": 1,
            "type": "string",
            "description": "Email address."
          },
          "phone": {
            "minLength": 1,
            "type": "string",
            "description": "Phone number."
          },
          "locale": {
            "minLength": 1,
            "type": "string",
            "description": "ISO 639-1 language code."
          },
          "businessName": {
            "type": "string",
            "description": "Business name only required for enterprise customers.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateManagedCustomerResponse": {
        "type": "object",
        "properties": {
          "accountNumber": {
            "type": "string",
            "nullable": true
          },
          "serviceAccountClientId": {
            "type": "string",
            "nullable": true
          },
          "serviceAccountSecret": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateManagedCustomerResponseServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/CreateManagedCustomerResponse"
          }
        },
        "additionalProperties": false
      },
      "CurrencyBalanceResponse": {
        "type": "object",
        "properties": {
          "currency": {
            "type": "string",
            "description": "The ISO 4217 alphabetic currency code of the balance. Example: USD"
          },
          "dueAmount": {
            "type": "number",
            "description": "The amount due",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "DataBlockMonthlyPublicResponse": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": "string",
            "description": "Start date of the respective month.",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "description": "End date of the respective month.",
            "format": "date-time"
          },
          "serviceLineUsage": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockServiceLineUsagePublicResponse"
            },
            "description": "Montly usage breakdown by service lines."
          }
        },
        "additionalProperties": false
      },
      "DataBlockMonthlyResponseV2": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": "string",
            "description": "Start date of the respective month.",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "description": "End date of the respective month.",
            "format": "date-time"
          },
          "serviceLineUsage": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockServiceLineUsagePublicResponseV2"
            },
            "description": "Montly usage breakdown by service lines."
          }
        },
        "additionalProperties": false
      },
      "DataBlockResponseV2": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "description": "Product ID of the data block."
          },
          "startDate": {
            "type": "string",
            "description": "Start date of the data block, i.e. when it is active for consumption.",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "description": "End date of the data block, i.e. when it is no longer active for consumption.",
            "format": "date-time"
          },
          "isPrepaid": {
            "type": "boolean",
            "description": "If the data block is prepaid."
          },
          "blocksCount": {
            "type": "integer",
            "description": "Number of data blocks.",
            "format": "int32"
          },
          "type": {
            "$ref": "#/components/schemas/DataBlockType"
          },
          "dataAmountGB": {
            "type": "number",
            "description": "GB capacity per individual block.",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "DataBlockServiceLineUsagePublicResponse": {
        "type": "object",
        "properties": {
          "serviceLineNumber": {
            "type": "string",
            "description": "Service line number."
          },
          "consumedAmountGB": {
            "type": "number",
            "description": "GB amount that the service line consumed from the block.",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "DataBlockServiceLineUsagePublicResponseV2": {
        "type": "object",
        "properties": {
          "serviceLineNumber": {
            "type": "string",
            "description": "Service line number."
          },
          "consumedAmountGB": {
            "type": "number",
            "description": "GB amount that the service line consumed from the block.",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "DataBlockSummaryResponse": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "description": "The block's product id.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "The block's start date.",
            "format": "date-time"
          },
          "expirationDate": {
            "type": "string",
            "description": "The block's end date.",
            "format": "date-time"
          },
          "count": {
            "type": "integer",
            "description": "How many blocks of this type there are.",
            "format": "int32"
          },
          "dataAmount": {
            "type": "number",
            "description": "The data amount of each block.",
            "format": "double"
          },
          "dataUnitType": {
            "type": "string",
            "description": "The unit that the data amount is in.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DataBlockType": {
        "enum": [
          "IncludedWithBaseSubscription",
          "RecurringPerBillingCycle",
          "Overage",
          "OneTimePurchase"
        ],
        "type": "string",
        "x-enumNames": [
          "IncludedWithBaseSubscription",
          "RecurringPerBillingCycle",
          "Overage",
          "OneTimePurchase"
        ]
      },
      "DataBlockUsagePublicResponse": {
        "type": "object",
        "properties": {
          "dataBlockId": {
            "type": "string",
            "description": "Data block ID"
          },
          "startDateUtc": {
            "type": "string",
            "description": "UTC start date of the data block.",
            "format": "date-time"
          },
          "expirationDateUtc": {
            "type": "string",
            "description": "UTC expiration date of the data block.",
            "format": "date-time"
          },
          "totalAmountGB": {
            "type": "number",
            "description": "Total GB capacity, calculated by multiplying BlocksCount and PerBlockAmountGB.",
            "format": "double"
          },
          "consumedAmountGB": {
            "type": "number",
            "description": "How much data has been used on the block.",
            "format": "double"
          },
          "perBlockAmountGB": {
            "type": "number",
            "description": "GB capacity per individual block.",
            "format": "double"
          },
          "dataBlockType": {
            "$ref": "#/components/schemas/DataBlockType"
          },
          "productId": {
            "type": "string",
            "description": "Product ID of the data block."
          },
          "blocksCount": {
            "type": "integer",
            "description": "Number of data blocks.",
            "format": "int32"
          },
          "perBlockPrice": {
            "type": "number",
            "description": "Price per individual data block.",
            "format": "double"
          },
          "totalPrice": {
            "type": "number",
            "description": "Total price, calculated by multiplying PerBlockPrice and BlocksCount.",
            "format": "double",
            "readOnly": true
          },
          "isoCurrencyCode": {
            "type": "string",
            "description": "Currency code for the price."
          },
          "serviceLineUsage": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockServiceLineUsagePublicResponse"
            },
            "description": "Usage breakdown by service lines."
          },
          "monthlyUsage": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockMonthlyPublicResponse"
            },
            "description": "Usage breakdown by month."
          }
        },
        "additionalProperties": false
      },
      "DataBlockUsageResponseV2": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": "string",
            "description": "UTC start date of the data block.",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "description": "UTC end date of the data block.",
            "format": "date-time"
          },
          "totalAmountGB": {
            "type": "number",
            "description": "Total GB capacity, calculated by multiplying BlocksCount and PerBlockAmountGB.",
            "format": "double"
          },
          "consumedAmountGB": {
            "type": "number",
            "description": "How much data has been used on the block.",
            "format": "double"
          },
          "perBlockAmountGB": {
            "type": "number",
            "description": "GB capacity per individual block.",
            "format": "double"
          },
          "dataBlockType": {
            "$ref": "#/components/schemas/DataBlockType"
          },
          "productId": {
            "type": "string",
            "description": "Product ID of the data block."
          },
          "blocksCount": {
            "type": "integer",
            "description": "Number of data blocks.",
            "format": "int32"
          },
          "serviceLineUsage": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockServiceLineUsagePublicResponseV2"
            },
            "description": "Usage breakdown by service lines."
          },
          "monthlyUsage": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockMonthlyResponseV2"
            },
            "description": "Usage breakdown by month."
          }
        },
        "additionalProperties": false
      },
      "DataBucketType": {
        "enum": [
          0,
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10
        ],
        "type": "integer",
        "format": "int32",
        "x-enumNames": [
          "Unknown",
          "MobileRestricted",
          "MobileUnrestricted",
          "FixedRestricted",
          "FixedUnrestricted",
          "NonBillable",
          "MobileDeprioritizedLimited",
          "FixedDeprioritizedLimited",
          "Residential",
          "ResidentialLite",
          "Roam"
        ]
      },
      "DataOverageType": {
        "enum": [
          0,
          1,
          2,
          3
        ],
        "type": "integer",
        "format": "int32",
        "x-enumNames": [
          "None",
          "PriorityPerGb",
          "DeprioritizedPerGb",
          "LimitWithNoOverageData"
        ]
      },
      "DataPoolResponseV2": {
        "type": "object",
        "properties": {
          "dataPoolId": {
            "type": "string",
            "description": "Data pool ID."
          },
          "nickname": {
            "type": "string",
            "description": "Nickname of the data pool.",
            "nullable": true
          },
          "automaticTopUpEnabled": {
            "type": "boolean",
            "description": "If the data pool is opted-in to overage top-ups."
          },
          "restricted": {
            "type": "boolean",
            "description": "If the data pool and service lines on it are restricted due to exhausting their data"
          },
          "dataProductType": {
            "$ref": "#/components/schemas/DataProductType"
          },
          "dataBlocks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockResponseV2"
            },
            "description": "Active data blocks on the data pool."
          },
          "productId": {
            "type": "string",
            "description": "Product ID of the data pool."
          }
        },
        "additionalProperties": false
      },
      "DataPoolResponseV2Paginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataPoolResponseV2"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "DataPoolResponseV2PaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/DataPoolResponseV2Paginated"
          }
        },
        "additionalProperties": false
      },
      "DataPoolUsagePublicResponse": {
        "type": "object",
        "properties": {
          "accountNumber": {
            "type": "string",
            "description": "Account number that owns this data pool."
          },
          "dataPoolId": {
            "type": "string",
            "description": "Data pool ID."
          },
          "lastUpdated": {
            "type": "string",
            "description": "Timestamp when the data pool usage was last updated (UTC).",
            "format": "date-time"
          },
          "dataBlocks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockUsagePublicResponse"
            },
            "description": "Usage by data blocks in the pool."
          }
        },
        "additionalProperties": false
      },
      "DataPoolUsageResponseV2": {
        "type": "object",
        "properties": {
          "dataPoolId": {
            "type": "string",
            "description": "Data pool ID."
          },
          "dataBlocks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockUsageResponseV2"
            },
            "description": "Usage by data blocks in the pool."
          }
        },
        "additionalProperties": false
      },
      "DataPoolUsageResponseV2Paginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataPoolUsageResponseV2"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "DataPoolUsageResponseV2PaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/DataPoolUsageResponseV2Paginated"
          }
        },
        "additionalProperties": false
      },
      "DataProductResponse": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "nullable": true
          },
          "price": {
            "type": "number",
            "format": "double"
          },
          "isoCurrencyCode": {
            "type": "string",
            "nullable": true
          },
          "dataAmount": {
            "type": "number",
            "format": "double"
          },
          "dataUnit": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DataProductType": {
        "enum": [
          "Ocean",
          "Land",
          "Aviation"
        ],
        "type": "string",
        "x-enumNames": [
          "Ocean",
          "Land",
          "Aviation"
        ]
      },
      "DataProductsResponse": {
        "type": "object",
        "properties": {
          "topUpProduct": {
            "$ref": "#/components/schemas/DataProductResponse"
          },
          "dataBlockProducts": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataProductResponse"
            },
            "description": "The data block products that are available for this service plan.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DataServicePlan": {
        "required": [
          "dataCategoryMapping",
          "isMobilePlan",
          "isOptedIntoOverage",
          "productId",
          "usageLimitGB"
        ],
        "type": "object",
        "properties": {
          "isoCurrencyCode": {
            "type": "string",
            "description": "ISO currency code for displaying prices (e.g., \"USD\", \"EUR\"). Null if no subscription exists.",
            "nullable": true
          },
          "isMobilePlan": {
            "type": "boolean",
            "description": "Indicates if this is a mobile-type plan (mobility class is nomadic or mobile)."
          },
          "activeFrom": {
            "type": "string",
            "description": "Date when data usage tracking began for this product (UTC). May differ from subscription start date.",
            "format": "date-time",
            "nullable": true
          },
          "subscriptionActiveFrom": {
            "type": "string",
            "description": "Date when the service line's subscription started (UTC).",
            "format": "date-time",
            "nullable": true
          },
          "subscriptionEndDate": {
            "type": "string",
            "description": "Date when the subscription ended (UTC). Null for active subscriptions.",
            "format": "date-time",
            "nullable": true
          },
          "overageName": {
            "type": "string",
            "description": "Display name for the overage product shown in opt-in/out interfaces. Empty string if no overage product exists."
          },
          "overageDescription": {
            "type": "string",
            "description": "Description of the overage product shown in opt-in/out interfaces. Empty string if no overage product exists."
          },
          "isOptedIntoOverage": {
            "type": "boolean",
            "description": "Indicates whether the service line is currently opted into overage for metered plans."
          },
          "overageLineDeactivatedDate": {
            "type": "string",
            "description": "Most recent date and time when overage opt-in was disabled (UTC). Null if never disabled or currently opted in.",
            "format": "date-time",
            "nullable": true
          },
          "overageLine": {
            "$ref": "#/components/schemas/DataUsageOverageLine"
          },
          "dataPoolUsage": {
            "$ref": "#/components/schemas/DataPoolUsagePublicResponse"
          },
          "productId": {
            "minLength": 1,
            "type": "string",
            "description": "Product ID identifying the current subscription plan. Empty string if no subscription exists."
          },
          "usageLimitGB": {
            "type": "number",
            "description": "Usage limit in GB for this plan. For metered plans, this is the priority data limit. For Priority data plans, this is the total data pool capacity.",
            "format": "double"
          },
          "dataCategoryMapping": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/DataBucketType"
            },
            "description": "Deprecated. Value will always be empty dictionary."
          }
        },
        "additionalProperties": false
      },
      "DataUsageBillingCycleV2": {
        "type": "object",
        "properties": {
          "startDate": {
            "type": "string",
            "description": "Start date of the billing cycle.",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "description": "End date of the billing cycle.",
            "format": "date-time"
          },
          "dailyDataUsage": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataUsageDailyV2"
            },
            "description": "Daily data usage breakdown for each day in the billing cycle. Omits days with no recorded usage."
          },
          "overageLines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataUsageOverageLine"
            },
            "description": "Overage lines for metered plans showing usage beyond plan limits. Empty for plans without overage or cycles with no overage. May contain multiple lines if subscription changed mid-cycle."
          },
          "dataPoolUsage": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataPoolUsagePublicResponse"
            },
            "description": "Data pool usage information for Priority data plans. Empty for metered plans or if no data pools are attached."
          },
          "totalPriorityGB": {
            "type": "number",
            "description": "Total priority data consumed in this billing cycle (GB), rounded to 2 decimal places. Includes opt-in priority data.",
            "format": "double",
            "readOnly": true
          },
          "totalStandardGB": {
            "type": "number",
            "description": "Total standard data consumed in this billing cycle (GB), rounded to 2 decimal places.",
            "format": "double",
            "readOnly": true
          },
          "totalOptInPriorityGB": {
            "type": "number",
            "description": "Total priority data consumed while opted into overage in this billing cycle (GB), rounded to 2 decimal places. This is a subset of TotalPriorityGB.",
            "format": "double",
            "readOnly": true
          },
          "totalNonBillableGB": {
            "type": "number",
            "description": "Total non-billable data consumed in this billing cycle (GB), rounded to 2 decimal places.",
            "format": "double",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "DataUsageDailyV2": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "description": "Date of usage (UTC).",
            "format": "date-time"
          },
          "priorityGB": {
            "type": "number",
            "description": "Total priority (unrestricted, high-speed) data consumed on this day in GB. Includes opt-in priority data.",
            "format": "double"
          },
          "optInPriorityGB": {
            "type": "number",
            "description": "Portion of priority data consumed while opted into overage on this day in GB. This is a subset of PriorityGB, not additive.",
            "format": "double"
          },
          "standardGB": {
            "type": "number",
            "description": "Standard (deprioritized) data consumed on this day in GB.",
            "format": "double"
          },
          "nonBillableGB": {
            "type": "number",
            "description": "Non-billable data consumed on this day in GB.",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "DataUsageOverageLine": {
        "type": "object",
        "properties": {
          "restricted": {
            "$ref": "#/components/schemas/DataBucketType"
          },
          "unrestricted": {
            "$ref": "#/components/schemas/DataBucketType"
          },
          "pricePerGB": {
            "type": "number",
            "description": "Price per GB for overage consumption (e.g., 1.00 for $1.00/GB).",
            "format": "double"
          },
          "usageLimitGB": {
            "type": "number",
            "description": "Plan's included priority data limit in GB before overage charges apply. Zero for plans that are restricted by default.",
            "format": "double"
          },
          "overageAmountGB": {
            "type": "number",
            "description": "Amount of priority data consumed beyond the usage limit while opted into overage, in GB. Only opt-in priority data counts toward overage.",
            "format": "double"
          },
          "consumedAmountGB": {
            "type": "number",
            "description": "Amount of priority data consumed up to the usage limit, in GB.",
            "format": "double"
          },
          "overagePrice": {
            "type": "number",
            "description": "Total overage cost before taxes and fees.",
            "format": "double"
          },
          "productId": {
            "type": "string",
            "description": "Product ID for the overage product."
          },
          "dataOverageType": {
            "$ref": "#/components/schemas/DataOverageType"
          },
          "activeFrom": {
            "type": "string",
            "description": "Date when this overage period began tracking usage (UTC). Null if no usage has been recorded yet.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DefaultRouterConfigResponse": {
        "type": "object",
        "properties": {
          "configId": {
            "type": "string",
            "description": "Router configId that will be assigned to routers when they are first added to this account. Does not affect routers that are assigned no config.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DefaultRouterConfigResponseServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/DefaultRouterConfigResponse"
          }
        },
        "additionalProperties": false
      },
      "DeleteTlsConfigRequest": {
        "required": [
          "certificateBase64Pem"
        ],
        "type": "object",
        "properties": {
          "certificateBase64Pem": {
            "minLength": 1,
            "type": "string",
            "description": "Certificate base64 encoded pem string to match on for deletion of the corresponding certificate and key pair"
          }
        },
        "additionalProperties": false
      },
      "DeviceIdRequest": {
        "required": [
          "deviceId"
        ],
        "type": "object",
        "properties": {
          "deviceId": {
            "minLength": 1,
            "type": "string",
            "description": "User terminal Id, kit serial number, or dish serial number. Ex: 12345678-12345678-12345678"
          }
        },
        "additionalProperties": false
      },
      "EventType": {
        "enum": [
          "EventUnknown",
          "Departure",
          "Arrival",
          "MetadataUpdate"
        ],
        "type": "string",
        "x-enumNames": [
          "EventUnknown",
          "Departure",
          "Arrival",
          "MetadataUpdate"
        ]
      },
      "FeatureAccess": {
        "enum": [
          1,
          2,
          3,
          4,
          5,
          6,
          7,
          8,
          9,
          10,
          11,
          12,
          13,
          14,
          15,
          16,
          17,
          18,
          19,
          20,
          21,
          22,
          23,
          3001,
          3002,
          3003
        ],
        "type": "integer",
        "format": "int32",
        "x-enumNames": [
          "DeviceTelemetry",
          "DeviceCommand",
          "Financial",
          "UserManagement",
          "AccountInformation",
          "OutageHistory",
          "SupportRequest",
          "DeviceManagement",
          "ServicePlan",
          "UserViewership",
          "ServiceAccountManagement",
          "DataSharingPreferenceManagement",
          "DeviceConfigurationAssignment",
          "AviationFlightStatusManagement",
          "AdminOnlyUserManagementViaAPI",
          "ManagedAccountCreation",
          "ManagedAccountsInventoryManagement",
          "ManagedAccountInformation",
          "ManagedAccountStructureManagement",
          "ManagedAccountDeletion",
          "ManagedAccountLocationSettings",
          "DataUsageNotifications",
          "ManagedAccountBillingInformation",
          "GatedFeature__Installer",
          "GatedFeature__LawEnforcementAgency",
          "GatedFeature__StarlinkMobileData"
        ]
      },
      "FeaturePermission": {
        "required": [
          "featureAccess",
          "permission"
        ],
        "type": "object",
        "properties": {
          "featureAccess": {
            "$ref": "#/components/schemas/FeatureAccess"
          },
          "permission": {
            "$ref": "#/components/schemas/Permission"
          }
        },
        "additionalProperties": false
      },
      "InvoiceDetailResponse": {
        "type": "object",
        "properties": {
          "invoiceId": {
            "type": "string",
            "description": "The invoice identifier. Example: INV-DF-US-1234ABCD"
          },
          "orderReferenceId": {
            "type": "string",
            "description": "The order this invoice was generated from"
          },
          "currency": {
            "type": "string",
            "description": "The ISO 4217 alphabetic currency code of the invoice. Example: USD"
          },
          "dueAmount": {
            "type": "number",
            "description": "The amount still owed on the invoice",
            "format": "double"
          },
          "paidAmount": {
            "type": "number",
            "description": "The amount already paid on the invoice",
            "format": "double"
          },
          "invoiceDate": {
            "type": "string",
            "description": "The date the invoice was issued",
            "format": "date-time"
          },
          "dueDate": {
            "type": "string",
            "description": "The date payment is due",
            "format": "date-time",
            "nullable": true
          },
          "invoiceLines": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InvoiceLineDetailResponse"
            },
            "description": "The line items on the invoice"
          }
        },
        "additionalProperties": false
      },
      "InvoiceDetailResponseServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/InvoiceDetailResponse"
          }
        },
        "additionalProperties": false
      },
      "InvoiceLineDetailResponse": {
        "type": "object",
        "properties": {
          "productReferenceId": {
            "type": "string",
            "description": "The product identifier"
          },
          "productDescription": {
            "type": "string",
            "description": "The product description"
          },
          "serviceName": {
            "type": "string",
            "description": "The service name",
            "nullable": true
          },
          "serviceLineNumbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The service line numbers this line applies to"
          },
          "quantity": {
            "type": "number",
            "description": "The quantity billed",
            "format": "double"
          },
          "unitPrice": {
            "type": "number",
            "description": "The unit price, before tax",
            "format": "double"
          },
          "taxAmount": {
            "type": "number",
            "description": "The total tax",
            "format": "double"
          },
          "subTotal": {
            "type": "number",
            "description": "The line total, before tax",
            "format": "double"
          },
          "servicePeriodStartDate": {
            "type": "string",
            "description": "The start of the service period",
            "format": "date-time",
            "nullable": true
          },
          "servicePeriodEndDate": {
            "type": "string",
            "description": "The end of the service period",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "InvoiceSummaryResponse": {
        "type": "object",
        "properties": {
          "invoiceId": {
            "type": "string",
            "description": "The invoice identifier. Example: INV-DF-US-1234ABCD"
          },
          "description": {
            "type": "string",
            "description": "The invoice description. Example: Order"
          },
          "currency": {
            "type": "string",
            "description": "The ISO 4217 alphabetic currency code of the invoice. Example: USD"
          },
          "amount": {
            "type": "number",
            "description": "The total amount of the invoice",
            "format": "double"
          },
          "dueAmount": {
            "type": "number",
            "description": "The amount still owed on the invoice",
            "format": "double"
          },
          "invoiceDate": {
            "type": "string",
            "description": "The date the invoice was issued",
            "format": "date-time"
          },
          "dueDate": {
            "type": "string",
            "description": "The date payment is due",
            "format": "date-time",
            "nullable": true
          },
          "status": {
            "$ref": "#/components/schemas/PublicInvoiceStatus"
          }
        },
        "additionalProperties": false
      },
      "InvoiceSummaryResponsePaginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InvoiceSummaryResponse"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "InvoiceSummaryResponsePaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/InvoiceSummaryResponsePaginated"
          }
        },
        "additionalProperties": false
      },
      "L2VpnCircuitDefinition": {
        "type": "object",
        "properties": {
          "circuitId": {
            "type": "string",
            "description": "Deprecated: Use CircuitIds instead. Value will be first circuitId for redundant circuit groups.",
            "nullable": true,
            "deprecated": true
          },
          "circuitIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Starlink generated Ids of L2VPN circuits in this group. If multiple circuitIds are present then they are functioning as a redundant group.",
            "nullable": true
          },
          "customerVlans": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Customer VLANs are the inner tag and identify L2VPN customer traffic to and from a user terminal."
          },
          "serviceVlan": {
            "type": "integer",
            "description": "Outer VLAN tag used for Q-in-Q and identifies a single ethernet virtual circuit (EVC) for a user terminal. Null if no service VLAN configured.",
            "format": "int32",
            "nullable": true
          },
          "customerVlanRemap": {
            "type": "integer",
            "description": "Traffic tagged with the specified customer VLAN will have that VLAN tag remapped en-route to the value of customerVlanRemap if present. Value is null if no remapping.",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "L2VpnCircuitResponse": {
        "type": "object",
        "properties": {
          "circuitId": {
            "type": "string",
            "description": "Deprecated: Use CircuitIds instead. Value will be first circuitId for redundant circuit groups.",
            "nullable": true,
            "deprecated": true
          },
          "circuitIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Starlink generated Ids of L2VPN circuits in this group. If multiple circuitIds are present then they are functioning as a redundant group. CircuitIds present in redundant groups cannot be used individually.",
            "nullable": true
          },
          "popName": {
            "type": "string",
            "description": "Starlink PoP associated with this circuit.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "L2VpnCircuitResponseListServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L2VpnCircuitResponse"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "L2VpnSetCircuitRequest": {
        "required": [
          "circuitIds",
          "customerVlans"
        ],
        "type": "object",
        "properties": {
          "circuitId": {
            "type": "string",
            "description": "Deprecated field: use CircuitIds instead. Mutually exclusive with CircuitIds. Starlink generated Id of L2VPN circuit.",
            "nullable": true
          },
          "circuitIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Starlink generated Ids of L2VPN circuit(s) in this circuit group. If multiple circuitIds are present then they are functioning as a redundant group and must be located at the same PoP. Mutually exclusive with deprecated CircuitId field."
          },
          "customerVlans": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "int32"
            },
            "description": "Customer VLANs are the inner tag and identify L2VPN customer traffic to and from a user terminal."
          },
          "serviceVlan": {
            "type": "integer",
            "description": "Outer VLAN tag used for Q-in-Q and identifies a single ethernet virtual circuit (EVC) for a user terminal. Null or 0 if no service VLAN tag should be added.",
            "format": "int32",
            "nullable": true
          },
          "customerVlanRemap": {
            "type": "integer",
            "description": "Traffic tagged with the specified customer VLAN will have that VLAN tag remapped en-route to the value of customerVlanRemap if present. If remapping is occurring then CustomerVlans must contain a single value. Set value to null or 0 for no remapping.",
            "format": "int32",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ManagedAccountTreeNodeResponseV2": {
        "type": "object",
        "properties": {
          "accountNumber": {
            "type": "string",
            "description": "The account number"
          },
          "accountName": {
            "type": "string",
            "description": "The account name"
          },
          "managerAccountNumber": {
            "type": "string",
            "description": "The manager account number (null for root)",
            "nullable": true
          },
          "children": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of child account numbers"
          }
        },
        "additionalProperties": false
      },
      "ManagedAccountTreeResponseV2": {
        "type": "object",
        "properties": {
          "rootAccountNumber": {
            "type": "string",
            "description": "The root account number"
          },
          "tree": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/ManagedAccountTreeNodeResponseV2"
            },
            "description": "Dictionary mapping account numbers to tree nodes"
          }
        },
        "additionalProperties": false
      },
      "ManagedAccountTreeResponseV2ServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/ManagedAccountTreeResponseV2"
          }
        },
        "additionalProperties": false
      },
      "MobileMapResponse": {
        "type": "object",
        "properties": {
          "trackingAreaCode": {
            "type": "integer",
            "description": "Tracking area code",
            "format": "int32"
          },
          "broadcastPublicLandMobileNumber": {
            "type": "integer",
            "description": "Broadcast Public Land Mobile Number of serving network",
            "format": "int32"
          },
          "timestamp": {
            "type": "string",
            "description": "Timestamp in UTC of the start of the returned hour of data",
            "format": "date-time"
          },
          "accessType": {
            "type": "string",
            "description": "Network Access Type - home or reciprocal users"
          },
          "deviceType": {
            "type": "string",
            "description": "Device Type - commercial (phone/user equipment) or Internet of Things (IOT) device"
          },
          "serviceType": {
            "type": "string",
            "description": "Service Type - Commercial or Emergency"
          },
          "gapTimeSecondsByTrackingAreaCodeAverage": {
            "type": "number",
            "description": "Average duration of gaps in satellite coverage in seconds per tracking area code",
            "format": "double"
          },
          "gapTimeSecondsByTrackingAreaCodeP90": {
            "type": "number",
            "description": "90th percentile duration of gaps in satellite coverage in seconds per tracking area code",
            "format": "double"
          },
          "gapTimeSecondsByTrackingAreaCodeP50": {
            "type": "number",
            "description": "50th percentile duration of gaps in satellite coverage in seconds per tracking area code",
            "format": "double"
          },
          "trackingAreaCodeBeamAvailabilitySeconds": {
            "type": "number",
            "description": "Total time of beam coverage/placement in seconds per tracking area code (0-3600)",
            "format": "double"
          },
          "totalShortMessageServiceMessages": {
            "type": "integer",
            "description": "Total number of Mobile Originated (MO) and Mobile Terminated (MT) Short Message Services sent per tracking area code",
            "format": "int32"
          },
          "uniqueInternationalMobileSubscriberIdentities": {
            "type": "integer",
            "description": "Unique International Mobile Subscriber Identity (IMSI) count of users that connect with 'NAS_ATTACH_COMPLETE' message received per tracking area code",
            "format": "int32"
          },
          "upLinkDataConsumedMegabytesPerTrackingAreaCodeAverage": {
            "type": "number",
            "description": "Average value of uplink data consumed measured at serving gateway (SGw) in megabytes per tracking area code",
            "format": "double"
          },
          "downLinkDataConsumedMegabytesPerTrackingAreaCodeAverage": {
            "type": "number",
            "description": "Average value of downlink data consumed measured at serving gateway (SGw) in megabytes per tracking area code",
            "format": "double"
          }
        },
        "additionalProperties": false
      },
      "MobileMapResponseListServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MobileMapResponse"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MobileRanResponse": {
        "type": "object",
        "properties": {
          "trackingAreaCode": {
            "type": "integer",
            "description": "Tracking area code",
            "format": "int32"
          },
          "timestamp": {
            "type": "string",
            "description": "Timestamp in UTC of the start of the returned hour of data",
            "format": "date-time"
          },
          "broadcastPublicLandMobileNumber": {
            "type": "integer",
            "description": "Broadcast Public Land Mobile Number of serving network",
            "format": "int32"
          },
          "radioResourceControllerConnectionsCompleted": {
            "type": "integer",
            "description": "Total number of Radio Resource Controller (RRC) connections completed",
            "format": "int32"
          },
          "radioResourceControllerConnectionsRequested": {
            "type": "integer",
            "description": "Total number of Radio Resource Controller (RRC) connections requested",
            "format": "int32"
          },
          "radioResourceControllerSuccessRate": {
            "type": "number",
            "description": "Radio Resource Controller success rate -> (RadioResourceControllerConnectionsCompleted / RadioResourceControllerConnectionsRequested)*100 (0-100)",
            "format": "float"
          },
          "radioResourceControllerAdmissionRejects": {
            "type": "integer",
            "description": "Total number of admission rejects due to 128 user limit",
            "format": "int32"
          },
          "radioResourceControllerConnectionsMax": {
            "type": "integer",
            "description": "Highest instantaneous value of maximum Radio Resource Controller concurrently connected users",
            "format": "int32"
          },
          "radioResourceControllerConnectionsP90": {
            "type": "number",
            "description": "90th percentile of concurrent Radio Resource Controller connections",
            "format": "float"
          },
          "resourceControllerConnectionsAverage": {
            "type": "number",
            "description": "Average number of concurrent Radio Resource Controller connections",
            "format": "float"
          },
          "activeUsersAverage": {
            "type": "number",
            "description": "Active users = SUM(number initial context setup requests + handover in attempts)",
            "format": "float"
          },
          "activeUsersMax": {
            "type": "number",
            "description": "Maximum value of active users during hour",
            "format": "float"
          },
          "uplinkPhysicalResourceBlockUtilizationP90": {
            "type": "number",
            "description": "90th percentile of uplink physical resource block usage (0-100)",
            "format": "float"
          },
          "downlinkPhysicalResourceBlockUtilizationP90": {
            "type": "number",
            "description": "90th percentile of downlink physical resource block usage (0-100)",
            "format": "float"
          },
          "uplinkPhysicalResourceBlockUtilizationMax": {
            "type": "number",
            "description": "Maximum of Uplink physical resource block usage during aggregation period (0-100)",
            "format": "float"
          },
          "downlinkPhysicalResourceBlockUtilizationMax": {
            "type": "number",
            "description": "Maximum of downlink physical resource block usage during aggregation period (0-100)",
            "format": "float"
          },
          "uplinkPhysicalResourceBlockUtilizationAverage": {
            "type": "number",
            "description": "Average of uplink physical resource block usage during aggregation period (0-100)",
            "format": "float"
          },
          "downlinkPhysicalResourceBlockUtilizationAverage": {
            "type": "number",
            "description": "Average of downlink physical resource block usage during aggregation period (0-100)",
            "format": "float"
          },
          "uplinkThroughputKilobitsPerSecMax": {
            "type": "number",
            "description": "Maximum uplink data throughput at eNode-B kilobits per second",
            "format": "float"
          },
          "downlinkThroughputKilobitsPerSecMax": {
            "type": "number",
            "description": "Maximum downlink data throughput at eNode-B kilobits per second",
            "format": "float"
          },
          "downlinkThroughputKilobitsPerSecAverage": {
            "type": "number",
            "description": "Average downlink data throughput at eNode-B kilobits per second",
            "format": "float"
          },
          "uplinkThroughputKilobitsPerSecAverage": {
            "type": "number",
            "description": "Average uplink data throughput at eNode-B kilobits per second",
            "format": "float"
          },
          "downlinkThroughputKilobitsPerSecP90": {
            "type": "number",
            "description": "90th percentile downlink data throughput at eNode-B kilobits per second",
            "format": "float"
          },
          "uplinkThroughputKilobitsPerSecP90": {
            "type": "number",
            "description": "90th percentile uplink data throughput at eNode-B kilobits per second",
            "format": "float"
          },
          "downlinkThroughputKilobitsPerSecPerUserAverage": {
            "type": "number",
            "description": "Average downlink data throughput at eNode-B kilobits per second",
            "format": "float"
          },
          "downlinkThroughputKilobitsPerSecPerUserMax": {
            "type": "number",
            "description": "Maximum downlink data throughput at eNode-B kilobits per second",
            "format": "float"
          },
          "uplinkThroughputKilobitsPerSecPerUserAverage": {
            "type": "number",
            "description": "Average uplink data throughput at eNode-B kilobits per second",
            "format": "float"
          },
          "uplinkThroughputKilobitsPerSecPerUserMax": {
            "type": "number",
            "description": "Maximum uplink data throughput at eNode-B kilobits per second",
            "format": "float"
          }
        },
        "additionalProperties": false
      },
      "MobileRanResponseListServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MobileRanResponse"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "MobileTimeSeriesResponse": {
        "type": "object",
        "properties": {
          "timestamp": {
            "type": "string",
            "description": "Timestamp in UTC of the start of the returned hour of data)",
            "format": "date-time"
          },
          "networkAccessType": {
            "type": "string",
            "description": "Network Access Type - home or reciprocal users"
          },
          "deviceType": {
            "type": "string",
            "description": "Device Type - commercial (phone/user equipment) or Internet of Things (IOT) device"
          },
          "serviceType": {
            "type": "string",
            "description": "Service Type - Commercial or Emergency"
          },
          "broadcastPublicLandMobileNumber": {
            "type": "number",
            "description": "Broadcast Public Land Mobile Number of serving network",
            "format": "float"
          },
          "nonAccessStratumAttachSuccessRate": {
            "type": "number",
            "description": "Non-Access Stratum (NAS) attach success rate -> (NAS_Accepted / (NAS_Accepted + NAS_Rejected))*100 (0-100)",
            "format": "float"
          },
          "nonAccessStratumAccepted": {
            "type": "number",
            "description": "Total number of Non-Access Stratum (NAS) Accepted messages sent",
            "format": "float"
          },
          "nonAccessStratumRejected": {
            "type": "number",
            "description": "Total number of Non-Access Stratum (NAS) Rejected messages sent",
            "format": "float"
          },
          "beamReliabilityRate": {
            "type": "number",
            "description": "(Beams placed / Total number of beams expected/scheduled to be placed)*100 (0-100)",
            "format": "float"
          },
          "uniqueUsers": {
            "type": "integer",
            "description": "Unique international mobile subscriber identity (IMSI) that received 'NAS_ATTACH_COMPLETE'",
            "format": "int32"
          },
          "totalSuccessfulMobileOriginatedMessages": {
            "type": "integer",
            "description": "Total number of Mobile Originated (MO) messages sent",
            "format": "int32"
          },
          "totalSuccessfulMobileTerminatedMessages": {
            "type": "integer",
            "description": "Total number of Mobile Terminated (MT) messages sent",
            "format": "int32"
          },
          "mobileTerminatedSuccessRate": {
            "type": "number",
            "description": "Success rate of Mobile Terminated short message service messages (0-100)",
            "format": "float"
          },
          "upLinkDataVolumeMegabytes": {
            "type": "number",
            "description": "Total uplink data consumed in megabytes measured at serving gateway (SGw)",
            "format": "float"
          },
          "downLinkDataVolumeMegabytes": {
            "type": "number",
            "description": "Total downlink data consumed in megabytes measured at serving gateway (SGw)",
            "format": "float"
          }
        },
        "additionalProperties": false
      },
      "MobileTimeSeriesResponseListServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MobileTimeSeriesResponse"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OptInResponse": {
        "type": "object",
        "properties": {
          "productId": {
            "type": "string",
            "description": "Opt in product Id."
          },
          "activatedDate": {
            "type": "string",
            "description": "Activation date.",
            "format": "date-time"
          },
          "deactivatedDate": {
            "type": "string",
            "description": "Deactivation date.",
            "format": "date-time",
            "nullable": true
          },
          "isInOptInCoolDown": {
            "type": "boolean",
            "description": "Whether service line is in cool down period from recently changing opted in state"
          }
        },
        "additionalProperties": false
      },
      "OptInResponseServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/OptInResponse"
          }
        },
        "additionalProperties": false
      },
      "PartialPeriodResponse": {
        "type": "object",
        "properties": {
          "productReferenceId": {
            "type": "string",
            "description": "The unique product identifier"
          },
          "periodStart": {
            "type": "string",
            "description": "The timestamp of the start of the partial period",
            "format": "date-time"
          },
          "periodEnd": {
            "type": "string",
            "description": "The timestamp of the end of the partial period",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "PartialPeriodResponseListServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PartialPeriodResponse"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "Permission": {
        "enum": [
          0,
          1
        ],
        "type": "integer",
        "format": "int32",
        "x-enumNames": [
          "View",
          "Edit"
        ]
      },
      "PublicInvoiceStatus": {
        "enum": [
          "Unknown",
          "Paid",
          "Cancelled",
          "Overdue",
          "DueSoon",
          "Outstanding"
        ],
        "type": "string",
        "description": "The status of an invoice",
        "x-enumNames": [
          "Unknown",
          "Paid",
          "Cancelled",
          "Overdue",
          "DueSoon",
          "Outstanding"
        ]
      },
      "QueryDataUsageRequest": {
        "type": "object",
        "properties": {
          "serviceLineNumbers": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Service line numbers to filter by. Queries for all service lines on account if omitted",
            "nullable": true
          },
          "previousBillingCycles": {
            "type": "integer",
            "description": "Number of previous billing cycles to include in addition to the current one. Defaults to 1",
            "format": "int32",
            "nullable": true
          },
          "activeServiceLinesOnly": {
            "type": "boolean",
            "description": "Whether to filter by only active service lines. Defaults to true"
          },
          "queryStartDate": {
            "type": "string",
            "description": "Override the first cycle's start date with the provided query start date",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RecurringDataBlocksRequest": {
        "type": "object",
        "properties": {
          "recurringDataBlocks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AddDataBlockRequest"
            },
            "description": "Recurring data blocks to configure",
            "nullable": true
          },
          "dataPoolId": {
            "type": "string",
            "description": "If provided, onboard the service line onto an existing data pool. The data pool must be multi-service-line enabled. This parameter is mutually exclusive with RecurringDataBlocks.",
            "nullable": true
          },
          "applyToCurrentMonth": {
            "type": "boolean",
            "description": "When true, creates additional blocks for the current billing cycle so the current month data block counts match the new recurring configuration.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RouterConfigRequest": {
        "required": [
          "routerConfigJson"
        ],
        "type": "object",
        "properties": {
          "nickname": {
            "type": "string",
            "description": "Nickname",
            "nullable": true
          },
          "routerConfigJson": {
            "minLength": 1,
            "type": "string",
            "description": "Router config json contents"
          }
        },
        "additionalProperties": false
      },
      "RouterConfigResponseV2": {
        "type": "object",
        "properties": {
          "configId": {
            "type": "string",
            "description": "Config Id."
          },
          "nickname": {
            "type": "string",
            "description": "Nickname for this config. Must be less than 100 characters."
          },
          "routerConfigJson": {
            "type": "string",
            "description": "Config in JSON format."
          }
        },
        "additionalProperties": false
      },
      "RouterConfigResponseV2Paginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouterConfigResponseV2"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "RouterConfigResponseV2PaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/RouterConfigResponseV2Paginated"
          }
        },
        "additionalProperties": false
      },
      "RouterConfigResponseV2ServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/RouterConfigResponseV2"
          }
        },
        "additionalProperties": false
      },
      "RouterLocalContentResponse": {
        "type": "object",
        "properties": {
          "nickname": {
            "type": "string",
            "description": "Uploaded file name"
          },
          "uploadDate": {
            "type": "string",
            "description": "Upload timestamp",
            "format": "date-time"
          },
          "fileContentId": {
            "type": "string",
            "description": "Id of uploaded local content file, used in router config HTTPS server"
          },
          "fileContentHash": {
            "type": "string",
            "description": "MD5 hash of the uploaded file used to verify integrity when router downloads the file for hosting. Used in router config HTTPS server"
          }
        },
        "additionalProperties": false
      },
      "RouterLocalContentResponseListServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouterLocalContentResponse"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RouterResponseV2": {
        "type": "object",
        "properties": {
          "routerId": {
            "type": "string",
            "description": "Router Id."
          },
          "nickname": {
            "type": "string",
            "description": "Nickname of the router.",
            "nullable": true
          },
          "userTerminalId": {
            "type": "string",
            "description": "User terminal Id this router is bonded to."
          },
          "configId": {
            "type": "string",
            "description": "Router config this router is assigned to, or null if no config assigned.",
            "nullable": true
          },
          "hardwareVersion": {
            "type": "string",
            "description": "Deprecated field. Value will always be null",
            "nullable": true
          },
          "lastBonded": {
            "type": "string",
            "description": "Deprecated field. Value will always be null",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "RouterResponseV2ServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/RouterResponseV2"
          }
        },
        "additionalProperties": false
      },
      "SandboxClientResponse": {
        "type": "object",
        "properties": {
          "clientId": {
            "type": "string",
            "nullable": true
          },
          "sandboxId": {
            "type": "integer",
            "format": "int32"
          },
          "expiry": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "SandboxClientResponsePaginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SandboxClientResponse"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "SandboxClientResponsePaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/SandboxClientResponsePaginated"
          }
        },
        "additionalProperties": false
      },
      "SandboxHeartbeatRequest": {
        "required": [
          "healthy"
        ],
        "type": "object",
        "properties": {
          "healthy": {
            "type": "boolean",
            "description": "True if client systems are healthy, false otherwise."
          }
        },
        "additionalProperties": false
      },
      "ServiceLineCreateRequestV2": {
        "required": [
          "addressReferenceId",
          "productReferenceId"
        ],
        "type": "object",
        "properties": {
          "addressReferenceId": {
            "type": "string",
            "description": "Address Reference ID to associate with the service line. Example: 55ec6574-10d8-bd9c-1951-d4184f4ae467",
            "format": "uuid"
          },
          "productReferenceId": {
            "minLength": 1,
            "type": "string",
            "description": "Subscription Product ID to associate with the service line. Example: business-subscription-100"
          },
          "dataBlockProducts": {
            "$ref": "#/components/schemas/ServiceLineDataBlocksRequest"
          }
        },
        "additionalProperties": false
      },
      "ServiceLineDataBlocksRequest": {
        "type": "object",
        "properties": {
          "recurringDataBlocks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AddDataBlockRequest"
            },
            "description": "Recurring data blocks to configure",
            "nullable": true
          },
          "dataPoolId": {
            "type": "string",
            "description": "Pre-Release: The ID of an existing multi-service-line data pool to which a new service line should be added. This field is mutually exclusive with RecurringDataBlocks and cannot be used together with it. Available for select audiences only.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ServiceLineDataBlocksSummaryResponse": {
        "type": "object",
        "properties": {
          "recurringBlocksCurrentBillingCycle": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockSummaryResponse"
            },
            "description": "The current billing cycle's monthly recurring data blocks.",
            "nullable": true
          },
          "recurringBlocksNextBillingCycle": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockSummaryResponse"
            },
            "description": "Next billing cycle's monthly recurring data blocks.",
            "nullable": true
          },
          "delayedProductRecurringBlocksNextCycle": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockSummaryResponse"
            },
            "description": "What recurring blocks will be when the service line switches to the delayed product.",
            "nullable": true
          },
          "topUpBlocksOptInPurchase": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockSummaryResponse"
            },
            "description": "What top up blocks were automatically purchased because the service line was out of data and opted in.",
            "nullable": true
          },
          "topUpBlocksOneTimePurchase": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataBlockSummaryResponse"
            },
            "description": "What top up blocks were manually purchased.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ServiceLineDataUsageForBillingCycles": {
        "type": "object",
        "properties": {
          "accountNumber": {
            "type": "string",
            "description": "Account number that owns this service line."
          },
          "serviceLineNumber": {
            "type": "string",
            "description": "Service line number for which usage data is reported."
          },
          "startDate": {
            "type": "string",
            "description": "Start date of the first billing cycle in the response (UTC).",
            "format": "date-time"
          },
          "endDate": {
            "type": "string",
            "description": "End date of the last billing cycle in the response (UTC).",
            "format": "date-time"
          },
          "billingCycles": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DataUsageBillingCycleV2"
            },
            "description": "Data usage grouped by billing cycle, ordered chronologically. The most recent cycle appears last in the array."
          },
          "servicePlan": {
            "$ref": "#/components/schemas/DataServicePlan"
          },
          "lastUpdated": {
            "type": "string",
            "description": "Timestamp when the usage data was last updated in the cache. Only present for cached data (typically yesterday and later).",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ServiceLineDataUsageForBillingCyclesPaginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceLineDataUsageForBillingCycles"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ServiceLineDataUsageForBillingCyclesPaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/ServiceLineDataUsageForBillingCyclesPaginated"
          }
        },
        "additionalProperties": false
      },
      "ServiceLineResponse": {
        "type": "object",
        "properties": {
          "addressReferenceId": {
            "type": "string",
            "description": "Address Reference ID of the address associated with the service line. Example: 55ec6574-10d8-bd9c-1951-d4184f4ae467",
            "format": "uuid"
          },
          "serviceLineNumber": {
            "type": "string",
            "description": "The Service Line Number. Example: AST-511274-31364-54"
          },
          "nickname": {
            "type": "string",
            "description": "A user-defined nickname for this service line.",
            "nullable": true
          },
          "productReferenceId": {
            "type": "string",
            "description": "The unique product identifier."
          },
          "delayedProductId": {
            "type": "string",
            "description": "Scheduled product change for next bill date.",
            "nullable": true
          },
          "optInProductId": {
            "type": "string",
            "description": "Opt-in product id, opted out if empty.",
            "nullable": true
          },
          "startDate": {
            "type": "string",
            "description": "The start date of the subscription. This is in UTC.",
            "format": "date-time",
            "nullable": true
          },
          "endDate": {
            "type": "string",
            "description": "The service line deactivation date, which only appears if the service line is deactivated. This is in UTC.",
            "format": "date-time",
            "nullable": true
          },
          "publicIp": {
            "type": "boolean",
            "description": "Indicates if service line is public IP."
          },
          "active": {
            "type": "boolean",
            "description": "Indicates if service line is active."
          },
          "aviationMetadata": {
            "$ref": "#/components/schemas/AviationMetadataResponse"
          },
          "dataBlocks": {
            "$ref": "#/components/schemas/ServiceLineDataBlocksSummaryResponse"
          }
        },
        "additionalProperties": false
      },
      "ServiceLineResponsePaginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceLineResponse"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "ServiceLineResponsePaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/ServiceLineResponsePaginated"
          }
        },
        "additionalProperties": false
      },
      "ServiceLineResponseServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/ServiceLineResponse"
          }
        },
        "additionalProperties": false
      },
      "ServiceLineSetPublicIpRequest": {
        "required": [
          "publicIp"
        ],
        "type": "object",
        "properties": {
          "publicIp": {
            "type": "boolean",
            "description": "If public IP should be enabled or not"
          }
        },
        "additionalProperties": false
      },
      "ServiceLineUpdateNicknameRequest": {
        "required": [
          "nickname"
        ],
        "type": "object",
        "properties": {
          "nickname": {
            "minLength": 1,
            "type": "string",
            "description": "New nickname for the existing service line."
          }
        },
        "additionalProperties": false
      },
      "ServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          }
        },
        "additionalProperties": false
      },
      "StarlinkFlightRequest": {
        "required": [
          "eventType",
          "flightNumber",
          "tailNumber"
        ],
        "type": "object",
        "properties": {
          "tailNumber": {
            "minLength": 1,
            "type": "string",
            "description": "Tail Number that matches aircraft registration."
          },
          "flightNumber": {
            "maxLength": 7,
            "minLength": 3,
            "type": "string",
            "description": "Flight Number that specifies specific route operated by airlines. Please include 2-character airline code in IATA format followed by 1-4 digits."
          },
          "eventType": {
            "$ref": "#/components/schemas/EventType"
          },
          "eventTimeUtc": {
            "type": "string",
            "description": "ISO 8601 Timestamp that represents actual gate departure (if eventType = Departure) or gate arrival (if eventType = Arrival) time in UTC.",
            "format": "date-time",
            "nullable": true
          },
          "eventAirport": {
            "$ref": "#/components/schemas/AirportCode"
          },
          "scheduledArrivalAirport": {
            "$ref": "#/components/schemas/AirportCode"
          },
          "estimatedGateArrivalTimeUtc": {
            "type": "string",
            "description": "Optional Metadata. ISO 8601 Timestamp that represents estimated gate arrival time in UTC.",
            "format": "date-time",
            "nullable": true
          },
          "passengerCount": {
            "type": "integer",
            "description": "Optional Metadata. Actual passenger count on flight.",
            "format": "int32",
            "nullable": true
          },
          "slaOptOutFlight": {
            "type": "boolean",
            "description": "Optional Metadata. Exclude this flight from Starlink SLA commitments. Default is false.",
            "default": false
          }
        },
        "additionalProperties": false
      },
      "SubscriptionProductResponse": {
        "type": "object",
        "properties": {
          "productReferenceId": {
            "type": "string",
            "description": "The unique product identifier"
          },
          "name": {
            "type": "string",
            "description": "Name of the product"
          },
          "price": {
            "type": "number",
            "description": "Monthly price",
            "format": "double"
          },
          "isoCurrencyCode": {
            "type": "string",
            "description": "Currency code for the price"
          },
          "isSla": {
            "type": "boolean",
            "description": "If Product Has SLA"
          },
          "maxNumberOfUserTerminals": {
            "type": "integer",
            "description": "The maximum number of user terminals that can be assigned to a single service line using this product. Null response means an unlimited number of UTs can be assigned.",
            "format": "int32",
            "nullable": true
          },
          "dataProducts": {
            "$ref": "#/components/schemas/DataProductsResponse"
          }
        },
        "additionalProperties": false
      },
      "SubscriptionProductResponsePaginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionProductResponse"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "SubscriptionProductResponsePaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/SubscriptionProductResponsePaginated"
          }
        },
        "additionalProperties": false
      },
      "TlsConfigCreateRequestV2": {
        "required": [
          "certificateBase64Pem",
          "keyBase64Pem"
        ],
        "type": "object",
        "properties": {
          "certificateBase64Pem": {
            "minLength": 1,
            "type": "string",
            "description": "TLS certificate in PEM format, base64 encoded."
          },
          "keyBase64Pem": {
            "minLength": 1,
            "type": "string",
            "description": "TLS key in PEM format, base64 encoded. Must match the public key of the certificate."
          }
        },
        "additionalProperties": false
      },
      "TlsConfigResponseV2": {
        "type": "object",
        "properties": {
          "certificateBase64Pem": {
            "type": "string",
            "description": "TLS certificate in PEM format, base64 encoded."
          },
          "notBefore": {
            "type": "string",
            "description": "Certificate invalid before this date.",
            "format": "date-time"
          },
          "notAfter": {
            "type": "string",
            "description": "Certificate invalid after this date.",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "TlsConfigResponseV2Paginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TlsConfigResponseV2"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "TlsConfigResponseV2PaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/TlsConfigResponseV2Paginated"
          }
        },
        "additionalProperties": false
      },
      "UpdateBatchSandboxClientRequest": {
        "required": [
          "clientId",
          "expiry",
          "sandboxId"
        ],
        "type": "object",
        "properties": {
          "clientId": {
            "minLength": 1,
            "type": "string",
            "description": "Identifier of the client to add or remove from a sandbox."
          },
          "sandboxId": {
            "type": "integer",
            "description": "Identifier used to separate sandbox environments. Per-client sandboxing is shared within the same SandboxId.",
            "format": "int32"
          },
          "expiry": {
            "type": "string",
            "description": "Expiry of the sandbox state as a UTC date time.",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "UpdateContactOnAccountRequest": {
        "type": "object",
        "properties": {
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Contact roles on the account.",
            "nullable": true
          },
          "phoneNumber": {
            "type": "string",
            "description": "Contact phone number.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateDefaultConfigRequest": {
        "required": [
          "configId"
        ],
        "type": "object",
        "properties": {
          "configId": {
            "minLength": 1,
            "type": "string",
            "description": "ConfigId or none to set as account default config. Use empty string to clear default config setting."
          }
        },
        "additionalProperties": false
      },
      "UpdateServiceLineProductRequest": {
        "required": [
          "productReferenceId"
        ],
        "type": "object",
        "properties": {
          "productReferenceId": {
            "minLength": 1,
            "type": "string",
            "description": "Product Id."
          },
          "recurringDataBlocks": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AddDataBlockRequest"
            },
            "description": "Recurring data blocks to configure.",
            "nullable": true
          },
          "dataPoolId": {
            "type": "string",
            "description": "Pre-Release: If provided, onboard the service line onto an existing multi-service-line data pool. This parameter is mutually exclusive with RecurringDataBlocks. Available for select audiences only.",
            "nullable": true
          },
          "delayUpdate": {
            "type": "boolean",
            "description": "Specifies when the change will be applied. True forces changes to be scheduled on the next billing cycle, False forces changes to occur immediately, Null uses legacy logic allowing upgrades to occur immediately and downgrades to be delayed.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserLacksRequiredPermission": {
        "type": "object",
        "properties": {
          "accountId": {
            "type": "string",
            "nullable": true
          },
          "requiredPermission": {
            "$ref": "#/components/schemas/FeaturePermission"
          },
          "featureAccessString": {
            "type": "string",
            "nullable": true
          },
          "permissionString": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UserLacksRequiredPermissionServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/UserLacksRequiredPermission"
          }
        },
        "additionalProperties": false
      },
      "UserResponse": {
        "required": [
          "email",
          "roles",
          "subjectId"
        ],
        "type": "object",
        "properties": {
          "subjectId": {
            "minLength": 1,
            "type": "string",
            "description": "Unique subject ID given to this user."
          },
          "email": {
            "minLength": 1,
            "type": "string",
            "description": "User email."
          },
          "roles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "List of User roles which map to permissions on the specified account."
          }
        },
        "additionalProperties": false
      },
      "UserResponsePaginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserResponse"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "UserResponsePaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/UserResponsePaginated"
          }
        },
        "additionalProperties": false
      },
      "UserResponseServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/UserResponse"
          }
        },
        "additionalProperties": false
      },
      "UserTerminalResponseV2": {
        "type": "object",
        "properties": {
          "userTerminalId": {
            "type": "string",
            "description": "User Terminal ID. This ID is not printed anywhere on the kit or hardware. Example: 00020900-002220cc-225b9199"
          },
          "nickname": {
            "type": "string",
            "description": "Nickname of the user terminal.",
            "nullable": true
          },
          "kitSerialNumber": {
            "type": "string",
            "description": "Kit Serial Number. This ID can be found on the box that the hardware came in. Example: KIT00142069"
          },
          "dishSerialNumber": {
            "type": "string",
            "description": "Dish Serial Number. This ID can be found on the dish itself. Example: 2DHT00542069"
          },
          "serviceLineNumber": {
            "type": "string",
            "description": "The service line the user terminal is associated with if it has service, Example: AST-511274-31364-54",
            "nullable": true
          },
          "l2VpnCircuits": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/L2VpnCircuitDefinition"
            },
            "description": "List of L2VPN circuits and associated VLANs configured for this terminal."
          },
          "routers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RouterResponseV2"
            },
            "description": "Routers currently bonded to this UT."
          }
        },
        "additionalProperties": false
      },
      "UserTerminalResponseV2Paginated": {
        "type": "object",
        "properties": {
          "pageIndex": {
            "type": "integer",
            "format": "int32"
          },
          "limit": {
            "type": "integer",
            "format": "int32"
          },
          "isLastPage": {
            "type": "boolean"
          },
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UserTerminalResponseV2"
            },
            "nullable": true
          },
          "totalCount": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "UserTerminalResponseV2PaginatedServiceResponse": {
        "type": "object",
        "properties": {
          "errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ValidationResult"
            },
            "nullable": true,
            "readOnly": true
          },
          "information": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "isValid": {
            "type": "boolean",
            "readOnly": true
          },
          "content": {
            "$ref": "#/components/schemas/UserTerminalResponseV2Paginated"
          }
        },
        "additionalProperties": false
      },
      "ValidationResult": {
        "type": "object",
        "properties": {
          "memberNames": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "nullable": true,
            "readOnly": true
          },
          "errorMessage": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      }
    }
  }
}