openapi: 3.2.0
info:
title: Starlink Public User Terminals API
description: '
Description
API to manage Starlink accounts and devices. For interactive endpoints list see: https://starlink.readme.io/Authentication - OIDC
To authenticate with this API using OIDC, Well Known URL and attach the result to your requests with the Authorize button below.
'
version: '2'
servers:
- url: /api
tags:
- name: User Terminals
paths:
/public/v2/user-terminals:
get:
tags:
- User Terminals
summary: Get all user terminals
description: 'Required permission: Device management, View.
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.
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.
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.
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.
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:
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
- 'null'
description: Nickname of the user terminal.
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
- 'null'
description: 'The service line the user terminal is associated with if it has service, Example: AST-511274-31364-54'
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
ServiceResponse:
type: object
properties:
errors:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ValidationResult'
readOnly: true
warnings:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ValidationResult'
readOnly: true
information:
type:
- array
- 'null'
items:
type: string
readOnly: true
isValid:
type: boolean
readOnly: true
additionalProperties: false
L2VpnSetCircuitRequest:
required:
- circuitIds
- customerVlans
type: object
properties:
circuitId:
type:
- string
- 'null'
description: 'Deprecated field: use CircuitIds instead. Mutually exclusive with CircuitIds. Starlink generated Id of L2VPN circuit.'
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
- 'null'
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
customerVlanRemap:
type:
- integer
- 'null'
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
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
L2VpnCircuitResponse:
type: object
properties:
circuitId:
type:
- string
- 'null'
description: 'Deprecated: Use CircuitIds instead. Value will be first circuitId for redundant circuit groups.'
deprecated: true
circuitIds:
type:
- array
- 'null'
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.
popName:
type:
- string
- 'null'
description: Starlink PoP associated with this circuit.
additionalProperties: false
L2VpnCircuitDefinition:
type: object
properties:
circuitId:
type:
- string
- 'null'
description: 'Deprecated: Use CircuitIds instead. Value will be first circuitId for redundant circuit groups.'
deprecated: true
circuitIds:
type:
- array
- 'null'
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.
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
- 'null'
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
customerVlanRemap:
type:
- integer
- 'null'
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
additionalProperties: false
ValidationResult:
type: object
properties:
memberNames:
type:
- array
- 'null'
items:
type: string
readOnly: true
errorMessage:
type:
- string
- 'null'
additionalProperties: false
AssignUserTerminalsConfigRequest:
required:
- userTerminalIds
type: object
properties:
configId:
type:
- string
- 'null'
description: Config id (or none) to assign to user terminals
userTerminalIds:
type: array
items:
type: string
description: UserTerminalIds to immediately update
additionalProperties: false
L2VpnCircuitResponseListServiceResponse:
type: object
properties:
errors:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ValidationResult'
readOnly: true
warnings:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ValidationResult'
readOnly: true
information:
type:
- array
- 'null'
items:
type: string
readOnly: true
isValid:
type: boolean
readOnly: true
content:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/L2VpnCircuitResponse'
additionalProperties: false
UserTerminalResponseV2Paginated:
type: object
properties:
pageIndex:
type: integer
format: int32
limit:
type: integer
format: int32
isLastPage:
type: boolean
results:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/UserTerminalResponseV2'
totalCount:
type: integer
format: int32
additionalProperties: false
UserTerminalResponseV2PaginatedServiceResponse:
type: object
properties:
errors:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ValidationResult'
readOnly: true
warnings:
type:
- array
- 'null'
items:
$ref: '#/components/schemas/ValidationResult'
readOnly: true
information:
type:
- array
- 'null'
items:
type: string
readOnly: true
isValid:
type: boolean
readOnly: true
content:
$ref: '#/components/schemas/UserTerminalResponseV2Paginated'
additionalProperties: false
RouterResponseV2:
type: object
properties:
routerId:
type: string
description: Router Id.
nickname:
type:
- string
- 'null'
description: Nickname of the router.
userTerminalId:
type: string
description: User terminal Id this router is bonded to.
configId:
type:
- string
- 'null'
description: Router config this router is assigned to, or null if no config assigned.
hardwareVersion:
type:
- string
- 'null'
description: Deprecated field. Value will always be null
lastBonded:
type:
- string
- 'null'
description: Deprecated field. Value will always be null
format: date-time
additionalProperties: false