Nursa · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Nursa Public API V2

5 actions 5 updates documentation extends openapi/nursa-public-api-v2-openapi.yml
Generated by API Evangelist Written by API Evangelist tooling for Nursa's API. It is a proposal applied on top of the contract, not a document Nursa publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-apievangelist-profilex-apievangelist-harvestedx-apievangelist-harvest-methodx-support-contactx-defectsx-agent-readiness-notesx-notetags

Targets 4

$.info
$
$.components
$.paths['/api/v2/support/facilities/user/associate'].put

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Nursa Public API V2
  version: 1.0.0
extends: openapi/nursa-public-api-v2-openapi.yml
x-provenance:
  generated: '2026-08-04'
  method: generated
  source: >-
    API Evangelist enrichment pipeline. Captures OUR additions and OUR observations about Nursa's
    published contract. It never mutates the harvested spec — apply it to see the enhanced view.
actions:
- target: $.info
  update:
    x-apievangelist-profile: https://apievangelist.com/providers/nursa
    x-apievangelist-harvested: '2026-08-04'
    x-apievangelist-harvest-method: >-
      decoded from the docusaurus-plugin-openapi-docs page chunks at docs.nursa.com; Nursa
      publishes no downloadable OpenAPI document
    x-support-contact: josh.bear@nursa.com
- target: $.info
  update:
    x-defects:
      description: >-
        Schema defects present in Nursa's own published operation objects, preserved verbatim in
        the harvested spec. Each one makes the contract fail standard OpenAPI validation.
      items:
      - invalid-type-Array: >-
          CliniciansController_getDetails declares `licenseType: {type: Array}` — OpenAPI types are
          lowercase; the valid value is `array` with an `items` schema.
      - invalid-type-sting: >-
          CliniciansController_getDetails declares `lastShiftDate: {type: sting}` — a typo for
          `string`.
      - boolean-example-as-string: >-
          FacilitiesController_favoritingClinician declares `isFavorited: {type: boolean}` with
          `example: 'true'` (a string).
      - number-field-string-example: >-
          MarketplaceShiftReportsController_* declares `reviewComment: {type: number}` with
          `example: A comment` — the field is prose, not a number.
      - polymorphic-message-field: >-
          The error envelope declares `message` as a string but 12 documented examples supply an
          array of validation strings.
      - untagged-operation: >-
          SupportFacilitiesController_associateUsersToFacility carries no tags, so it is orphaned
          in every generated reference.
- target: $
  update:
    x-agent-readiness-notes:
      idempotency: >-
        No idempotency contract. MarketplaceController_createShifts creates shifts in BATCHES under
        a transaction; a retried request after a timeout can double-post real financial
        commitments. An Idempotency-Key header on the four Marketplace write operations is the
        highest-value single addition to this API.
      error_semantics: >-
        Errors carry no stable machine-readable code — only prose in `message`. An agent must
        string-match to branch.
      pagination: >-
        Two pagination models coexist (limit+offset and page+limit) with no total or next-page
        signal.
      scopes: >-
        20 documented resource scopes exist, but every operation declares `security: [{public-api: []}]`
        with an EMPTY scope array, so least privilege cannot be computed from the contract.
      events: >-
        14 real webhook events with signed, retried delivery — and no AsyncAPI and no OpenAPI 3.1
        `webhooks:` block.
- target: $.components
  update:
    x-note: >-
      Nursa's spec defines no components.schemas — every body is inlined per operation. Extracting
      Facility, Shift, Clinician, ShiftRequest, ScheduledShift and ShiftReport into named schemas
      would make the contract generatable and remove the largest source of drift. See
      data-model/nursa-data-model.yml for the entity graph as derived.
- target: $.paths['/api/v2/support/facilities/user/associate'].put
  update:
    tags:
    - Support