Near Space Labs · OpenAPI Overlay 1.0.0

API Evangelist enhancements — Near Space Labs Tile Service

22 actions 22 updates documentation extends ../openapi/near-space-labs-tile-service.json
Generated by API Evangelist Written by API Evangelist tooling for Near Space Labs's API. It is a proposal applied on top of the contract, not a document Near Space Labs publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

tagsoperationIddeprecatedhostschemessecurityDefinitionssecurity

Targets 20 · first 16 shown; the file carries all of them

$
$.paths['/tile/v2/surveys'].get
$.paths['/tile/v2/surveys/coverage'].get
$.paths['/tile/v2/{mosaic_id}/footprint'].get
$.paths['/tile/v2/{mosaic_id}/coverage'].get
$.paths['/tile/v2/{mosaic_id}/mosaic_updates'].get
$.paths['/tile/v2/{mosaic_id}/{z}/{x}/{y}'].get
$.paths['/tile/v2/{mosaic_id}/{z}/{x}/{y}.{ext}'].get
$.paths['/tile/v2/{mosaic_id}/{mosaic_stac_id}/{z}/{x}/{y}'].get
$.paths['/tile/v2/{mosaic_id}/{mosaic_stac_id}/{z}/{x}/{y}.{ext}'].get
$.paths['/tile/rsm/{z}/{x}/{y}.{ext}'].get
$.paths['/tile/surveys'].get
$.paths['/tile/surveys/coverage'].get
$.paths['/tile/{mosaic_id}/coverage'].get
$.paths['/tile/{mosaic_id}/footprint'].get
$.paths['/tile/{mosaic_id}/mosaic_updates'].get

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements — Near Space Labs Tile Service
  version: 1.0.0
extends: ../openapi/near-space-labs-tile-service.json
x-provenance:
  generated: '2026-08-26'
  method: generated
  source: >-
    Enhancements API Evangelist would apply to the provider's own Swagger 2.0 contract fetched
    verbatim from https://api.nearspacelabs.net/tile/openapi/tile-server on 2026-08-26. The original
    is never mutated. Every value below is taken from the provider's own documentation
    (docs.nearspacelabs.com) or from the contract itself — nothing is invented.
x-gaps-addressed:
  - The document declares no `host`, `basePath` or `schemes`, so no client can resolve a request URL from it. The real base is https://api.nearspacelabs.net, documented on every docs page and used throughout the provider's own Postman collection.
  - No operation declares an `operationId`, so no generator can name a method and no Agent Skill or MCP tool can reference an operation by identifier.
  - No operation declares `tags`, so the 19 paths render as one flat list.
  - No `securityDefinitions` and no `security` block, even though the sibling OAuth Service contract states "Authentication is required for all endpoints" and every operation here declares 401 and 403 responses. A generator reading this file alone emits an unauthenticated client.
  - Nine legacy un-versioned /tile/ operations are described as deprecated in the docs and grouped in a "deprecated" folder in the provider's Postman collection, but none carries `deprecated: true`.
  - 429 (rate limit) and 422 (unprocessable) are documented on docs.nearspacelabs.com/error-handling but declared on no operation.
  - The `basemap` reserved survey id is documented in prose only and appears nowhere in the contract.
actions:
  - target: $
    description: Declare the production host and scheme so the contract is resolvable.
    update:
      host: api.nearspacelabs.net
      schemes:
        - https
  - target: $
    description: >-
      Declare the two credential shapes the provider documents at
      https://docs.nearspacelabs.com/authentication and apply them globally.
    update:
      securityDefinitions:
        oauth2ClientCredentials:
          type: oauth2
          flow: application
          tokenUrl: https://api.nearspacelabs.net/oauth/token
          scopes: {}
          description: >-
            OAuth 2.0 client credentials. POST client_id, client_secret, audience
            (https://api.nearspacelabs.com) and grant_type=client_credentials to /oauth/token; present
            the returned JWT as `Authorization: Bearer <access_token>`. Tokens are valid for 60 minutes.
        staticApiKey:
          type: apiKey
          in: query
          name: api_key
          description: >-
            A one-year static JWT issued by POST /oauth/static_key, passed as ?api_key=. Carries the
            same permissions as an OAuth token. The provider warns it "travels in the URL, where it
            can end up in server logs and browser history".
      security:
        - oauth2ClientCredentials: []
        - staticApiKey: []
  - target: $
    description: Declare tag groups so the surface is navigable.
    update:
      tags:
        - name: Surveys
          description: Catalog operations — list surveys, find surveys by area, fetch footprints.
        - name: Coverage
          description: Tile-level metadata for an area of interest, including static tile URLs.
        - name: Tiles
          description: XYZ tile delivery, 256x256 PNG/JPEG, zoom 14-21.
        - name: Deprecated
          description: Legacy un-versioned /tile/ routes retained for compatibility; use /tile/v2/.
  - target: $.paths['/tile/v2/surveys'].get
    description: Name and classify the paginated survey catalog operation.
    update:
      operationId: listSurveys
      tags: [Surveys]
  - target: $.paths['/tile/v2/surveys/coverage'].get
    description: Name and classify the area-of-interest survey search.
    update:
      operationId: findSurveysByArea
      tags: [Surveys]
  - target: $.paths['/tile/v2/{mosaic_id}/footprint'].get
    description: Name and classify the survey footprint operation.
    update:
      operationId: getSurveyFootprint
      tags: [Surveys]
  - target: $.paths['/tile/v2/{mosaic_id}/coverage'].get
    description: Name and classify the per-survey coverage operation.
    update:
      operationId: getSurveyCoverage
      tags: [Coverage]
  - target: $.paths['/tile/v2/{mosaic_id}/mosaic_updates'].get
    description: Name and classify the change-detection feed.
    update:
      operationId: listMosaicUpdates
      tags: [Coverage]
  - target: $.paths['/tile/v2/{mosaic_id}/{z}/{x}/{y}'].get
    description: Name and classify the latest-mosaic tile operation.
    update:
      operationId: getLatestTile
      tags: [Tiles]
  - target: $.paths['/tile/v2/{mosaic_id}/{z}/{x}/{y}.{ext}'].get
    description: Name and classify the latest-mosaic tile operation with an explicit format.
    update:
      operationId: getLatestTileWithExtension
      tags: [Tiles]
  - target: $.paths['/tile/v2/{mosaic_id}/{mosaic_stac_id}/{z}/{x}/{y}'].get
    description: Name and classify the historical-capture tile operation.
    update:
      operationId: getHistoricalTile
      tags: [Tiles]
  - target: $.paths['/tile/v2/{mosaic_id}/{mosaic_stac_id}/{z}/{x}/{y}.{ext}'].get
    description: Name and classify the historical-capture tile operation with an explicit format.
    update:
      operationId: getHistoricalTileWithExtension
      tags: [Tiles]
  - target: $.paths['/tile/rsm/{z}/{x}/{y}.{ext}'].get
    description: Name and classify the RSM mosaic tile operation.
    update:
      operationId: getRsmTile
      tags: [Tiles]
  - target: $.paths['/tile/surveys'].get
    description: Mark the legacy survey list deprecated, per the docs and the provider's Postman collection.
    update:
      operationId: listSurveysLegacy
      tags: [Deprecated]
      deprecated: true
  - target: $.paths['/tile/surveys/coverage'].get
    description: Mark the legacy area search deprecated.
    update:
      operationId: findSurveysByAreaLegacy
      tags: [Deprecated]
      deprecated: true
  - target: $.paths['/tile/{mosaic_id}/coverage'].get
    description: Mark the legacy coverage operation deprecated.
    update:
      operationId: getSurveyCoverageLegacy
      tags: [Deprecated]
      deprecated: true
  - target: $.paths['/tile/{mosaic_id}/footprint'].get
    description: Mark the legacy footprint operation deprecated.
    update:
      operationId: getSurveyFootprintLegacy
      tags: [Deprecated]
      deprecated: true
  - target: $.paths['/tile/{mosaic_id}/mosaic_updates'].get
    description: Mark the legacy mosaic-updates operation deprecated.
    update:
      operationId: listMosaicUpdatesLegacy
      tags: [Deprecated]
      deprecated: true
  - target: $.paths['/tile/{mosaic_id}/{z}/{x}/{y}'].get
    description: Mark the legacy latest-tile operation deprecated.
    update:
      operationId: getLatestTileLegacy
      tags: [Deprecated]
      deprecated: true
  - target: $.paths['/tile/{mosaic_id}/{z}/{x}/{y}.{ext}'].get
    description: Mark the legacy latest-tile-with-extension operation deprecated.
    update:
      operationId: getLatestTileWithExtensionLegacy
      tags: [Deprecated]
      deprecated: true
  - target: $.paths['/tile/{mosaic_id}/{mosaic_stac_id}/{z}/{x}/{y}'].get
    description: Mark the legacy historical-tile operation deprecated.
    update:
      operationId: getHistoricalTileLegacy
      tags: [Deprecated]
      deprecated: true
  - target: $.paths['/tile/{mosaic_id}/{mosaic_stac_id}/{z}/{x}/{y}.{ext}'].get
    description: Mark the legacy historical-tile-with-extension operation deprecated.
    update:
      operationId: getHistoricalTileWithExtensionLegacy
      tags: [Deprecated]
      deprecated: true
x-recommended-but-not-applied:
  - >-
    Declare the 429 and 422 responses the docs publish, with the shared error envelope
    {error, message, status_code, x-correlation-id}. Not applied as an overlay action because it
    would require authoring response schemas the provider has not published per-operation.
  - >-
    Hoist the repeated inline Survey / CoverageItem / Footprint shapes into `definitions` and $ref
    them. The contract currently re-inlines Survey with a different field set on each of the three
    operations that return it. See data-model/near-space-labs-data-model.yml.
  - >-
    Document the reserved `basemap` survey id, either as an enum value on `mosaic_id` or as its own
    path. It is currently prose-only on docs.nearspacelabs.com/retrieving-tiles.
  - >-
    Publish the contract as OpenAPI 3.1 rather than Swagger 2.0, which would allow binary tile
    responses and the JSON metadata projection of the same path to be described side by side.