Starlink Aviation Flight Status API

A single endpoint, POST /public/v2/flights/status, for posting real-time flight events from a Starlink-equipped aircraft. It is only callable from an aviation account and requires the Aviation flight status management, Edit permission. Related aviation guidance covers multi-Starlink WAN failover and GPS-independent location data for aircraft.

OpenAPI Specification

starlink-public-api-v2-openapi.json Raw ↑
{
  "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 perm

# --- truncated at 32 KB (244 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/starlink/refs/heads/main/openapi/starlink-public-api-v2-openapi.json