PixieBrix · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the PixieBrix Developer API

9 actions 9 updates documentation
Generated by API Evangelist Written by API Evangelist tooling for PixieBrix's API. It is a proposal applied on top of the contract, not a document PixieBrix publishes.
View Overlay File View on GitHub Overlay Specification

What the actions change

x-agentic-accesssecurityx-api-evangelist-reviewx-documentationx-referencex-spec-urlx-status-pagex-terms-of-service

Targets 8

$.info
$
$.paths['/api/health/'].get
$.paths..*[?(@.operationId)]
$.paths['/api/activity/data/'].delete
$.paths['/api/organizations/{organization_pk}/'].delete
$.paths['/api/organizations/{organization_pk}/serviceaccounts/{id}/'].delete
$.paths['/api/bricks/{id}/lock/'].post

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the PixieBrix Developer API
  version: 1.0.0
x-provenance:
  generated: '2026-08-26'
  method: generated
  source: openapi/pixiebrix-openapi.yml
  extends: openapi/pixiebrix-openapi.yml
  note: >-
    Non-destructive Overlay 1.0.0 capturing API Evangelist's enhancements to the
    PixieBrix-published OpenAPI 3.0.2 document. The original spec is never mutated.
    Every action below adds information the provider documents in prose but omits
    from the contract; nothing invents behaviour. The three material gaps this
    overlay closes are: (1) components.securitySchemes is EMPTY and no `security`
    block exists, so the contract does not say the API is authenticated; (2) not
    one 4xx/5xx response is declared on any of the 291 operations; (3) all 291
    operations lack a `summary`.
actions:
  - target: $.info
    description: Add contact/licence/terms context and the documented base URL.
    update:
      x-api-evangelist-review: '2026-08-26'
      x-documentation: https://docs.pixiebrix.com/developer-api
      x-reference: https://app.pixiebrix.com/api/docs/
      x-spec-url: https://app.pixiebrix.com/api/openapi/
      x-status-page: https://pixiebrix.statuspage.io/
      x-terms-of-service: https://www.pixiebrix.com/terms
      x-privacy-policy: https://www.pixiebrix.com/privacy

  - target: $
    description: >-
      Declare the token security scheme the API actually requires. The provider
      documents `Authorization: Token <token>` at
      https://docs.pixiebrix.com/developer-api/making-an-api-request#authentication
      but the published spec declares no securitySchemes at all.
    update:
      components:
        securitySchemes:
          serviceAccountToken:
            type: apiKey
            in: header
            name: Authorization
            description: >-
              Service Account token issued from the PixieBrix Admin Console. Send
              the literal word "Token", a space, then the token. Example header
              value: `Token <your-service-account-token>`.
            x-docs: https://docs.pixiebrix.com/developer-api/service-accounts
      security:
        - serviceAccountToken: []

  - target: $
    description: Record the documented request/response conventions on the document root.
    update:
      x-versioning:
        transport: Accept header media-type parameter
        format: 'application/json; version=2.0'
        current: '2.0'
        scheme: semver
        caveat: >-
          Not every endpoint serves version 2.0 - GET /api/health/ returns 406
          "Invalid version in Accept header" when version=2.0 is sent.
      x-pagination:
        params: [page, page_size]
        default_page_size: 100
        max_page_size: 1000
        response_headers: [Link, X-Total-Count]
        link_rfc: RFC 8288
      x-rate-limit:
        scope: per-token
        window: minute
        limit: not published
        exhaustion_status: 429
        response_headers: []
      x-idempotency:
        supported: false
        note: No idempotency key mechanism; 61 POST operations returning 201 are
          not replay-safe.
      x-cors:
        supported: false
      x-error-envelope:
        shape: '{"detail": "<message>"}'
        rfc9457: false

  - target: $.paths['/api/health/'].get
    description: >-
      Mark the health check as the one unauthenticated operation and document its
      real responses, none of which the original spec declares beyond 200.
    update:
      summary: Check PixieBrix API health
      security: []
      x-unauthenticated: true
      x-verified: '2026-08-26 returned 200 {"status":"ok"}'
      x-observed-406: >-
        Returns 406 {"detail":"Invalid version in \"Accept\" header."} when
        Accept requests version=2.0.

  - target: $.paths..*[?(@.operationId)]
    description: >-
      Attach the error responses that every authenticated operation can return.
      The provider's spec declares only 2xx codes across all 291 operations, so a
      generated client currently has no error type.
    update:
      x-error-responses:
        '400': Validation error - Django REST Framework field-keyed object
        '401': Missing or invalid Authorization token
        '403': Service Account role lacks permission for this operation
        '404': Unknown id, or resource outside the caller's organization
        '406': Unsupported version in the Accept header
        '429': Per-token throttle exceeded - back off and retry

  - target: $.paths['/api/activity/data/'].delete
    description: Flag the highest-consequence operation in the contract.
    update:
      x-agentic-access:
        action_class: destructive
        consequence: irreversible
        escalation: human-confirmation-required
        note: >-
          Unscoped purge of an organization's recorded activity data. No dry-run,
          no confirmation parameter, and no recovery window is published.

  - target: $.paths['/api/organizations/{organization_pk}/'].delete
    description: Flag tenant deletion.
    update:
      x-agentic-access:
        action_class: destructive
        consequence: irreversible
        escalation: human-confirmation-required

  - target: $.paths['/api/organizations/{organization_pk}/serviceaccounts/{id}/'].delete
    description: Flag credential revocation.
    update:
      x-agentic-access:
        action_class: destructive
        consequence: irreversible
        escalation: human-confirmation-required
        note: >-
          Revokes the token. A replacement Service Account gets a NEW token, and
          its Role cannot be changed after creation.

  - target: $.paths['/api/bricks/{id}/lock/'].post
    description: Record the reversal pairing for package locking.
    update:
      x-reversibility:
        reversible: true
        reversal_operation: destroyPackageLockCreate
        window: not published