> ## Documentation Index
> Fetch the complete documentation index at: https://docs.watchdog.no/llms.txt
> Use this file to discover all available pages before exploring further.

# Get invoice

> Poll the invoice resource returned in the upload `Location` header or referenced by `existing_invoice_id` in a duplicate response.

The `processing` and `alerts.processing` objects have independent lifecycles. Continue polling while either status is `pending` or `processing`, and respect `Retry-After` before polling again.

`alerts` is an aggregate across applicable agreements: active agreements with a confirmed or auto-confirmed invoice match. An applicable agreement that cannot be checked makes the aggregate fail; only an invoice without such agreements uses `no_applicable_agreements`.

`count` contains detected, non-superseded alerts and may increase while assessment is active. Dismissed alerts remain in the detected count, while `resolution` indicates whether the findings remain blocking: `manual_review` means every current alert was dismissed, and `credit_note` means the invoice has a matched credit note. A null count during active processing does not mean that no alerts were found. Individual alerts and agreement-level results remain available through `invoice_url`.

`alerts.result` and `alerts.resolution` must be interpreted together with `alerts.processing.status`. Neither is by itself an approval signal while alert processing is `pending`, `processing`, or `failed`: active assessment may find more alerts, and failed assessment is incomplete. `completed` is conclusive for the current snapshot; `skipped` means assessment did not run and is explained by `skip_reason`.

This response is a current snapshot, not an immutable assessment event. A terminal response may change after agreement edits, rechecks, alert review, replacements, or credit-note matching. Consumers that need later changes must fetch the resource again on their own cadence.

`invoice_id` is the stable API identifier. `invoice_number` is extracted metadata and must not be treated as unique.



## OpenAPI

````yaml https://api.watchdog.no/doc get /v1/invoices/{invoice_id}
openapi: 3.1.0
info:
  title: Watchdog API
  version: 0.0.0
  description: >-
    Watchdog public API. Server-to-server document upload and related
    operations.


    ## Authentication


    All `/v1/*` endpoints require a bearer token in the `Authorization` header
    (e.g. `Authorization: Bearer wdg_<your-token>`).


    **Generate a token:** sign in at [app.watchdog.no](https://app.watchdog.no),
    open **Settings → API keys**, and click **Create new key** (admins only).
    The plaintext token is shown **once** at creation and cannot be recovered —
    copy it into a secrets manager immediately. If lost, revoke and replace.


    Tokens carry one or more scopes: `invoices:write` for uploads and
    `invoices:read` for polling. New integration keys receive both
    automatically. The required scope per endpoint is listed under
    "Authorizations" below.
servers: []
security: []
paths:
  /v1/invoices/{invoice_id}:
    get:
      tags:
        - invoices
      summary: Get invoice
      description: >-
        Poll the invoice resource returned in the upload `Location` header or
        referenced by `existing_invoice_id` in a duplicate response.


        The `processing` and `alerts.processing` objects have independent
        lifecycles. Continue polling while either status is `pending` or
        `processing`, and respect `Retry-After` before polling again.


        `alerts` is an aggregate across applicable agreements: active agreements
        with a confirmed or auto-confirmed invoice match. An applicable
        agreement that cannot be checked makes the aggregate fail; only an
        invoice without such agreements uses `no_applicable_agreements`.


        `count` contains detected, non-superseded alerts and may increase while
        assessment is active. Dismissed alerts remain in the detected count,
        while `resolution` indicates whether the findings remain blocking:
        `manual_review` means every current alert was dismissed, and
        `credit_note` means the invoice has a matched credit note. A null count
        during active processing does not mean that no alerts were found.
        Individual alerts and agreement-level results remain available through
        `invoice_url`.


        `alerts.result` and `alerts.resolution` must be interpreted together
        with `alerts.processing.status`. Neither is by itself an approval signal
        while alert processing is `pending`, `processing`, or `failed`: active
        assessment may find more alerts, and failed assessment is incomplete.
        `completed` is conclusive for the current snapshot; `skipped` means
        assessment did not run and is explained by `skip_reason`.


        This response is a current snapshot, not an immutable assessment event.
        A terminal response may change after agreement edits, rechecks, alert
        review, replacements, or credit-note matching. Consumers that need later
        changes must fetch the resource again on their own cadence.


        `invoice_id` is the stable API identifier. `invoice_number` is extracted
        metadata and must not be treated as unique.
      parameters:
        - schema:
            type: string
            format: uuid
            description: Invoice identifier from a successful upload or duplicate response.
            example: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
          required: true
          description: Invoice identifier from a successful upload or duplicate response.
          name: invoice_id
          in: path
      responses:
        '200':
          description: Current invoice processing and aggregate alert-assessment state.
          headers:
            Cache-Control:
              schema:
                type: string
                example: no-store
              description: Prevents a changing polling response from being cached.
            Retry-After:
              schema:
                type: string
                example: '10'
              description: >-
                Seconds before polling again. Present exactly while either
                processing status is `pending` or `processing`.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvoiceStatusResponse'
              examples:
                processing:
                  summary: Invoice processing is underway
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: null
                    processing:
                      status: processing
                      classification: null
                      failure: null
                    alerts:
                      processing:
                        status: pending
                        skip_reason: null
                        failure: null
                      result: null
                      count: null
                      resolution: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                assessmentProcessing:
                  summary: Assessment is underway with alerts detected so far
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: '100234'
                    processing:
                      status: completed
                      classification: invoice
                      failure: null
                    alerts:
                      processing:
                        status: processing
                        skip_reason: null
                        failure: null
                      result: alerts_found
                      count: 2
                      resolution:
                        status: open
                        method: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                alertsFound:
                  summary: Assessment completed with alerts
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: '100234'
                    processing:
                      status: completed
                      classification: invoice
                      failure: null
                    alerts:
                      processing:
                        status: completed
                        skip_reason: null
                        failure: null
                      result: alerts_found
                      count: 7
                      resolution:
                        status: open
                        method: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                noAlerts:
                  summary: Assessment completed without alerts
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: '100234'
                    processing:
                      status: completed
                      classification: invoice
                      failure: null
                    alerts:
                      processing:
                        status: completed
                        skip_reason: null
                        failure: null
                      result: no_alerts_found
                      count: 0
                      resolution: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                partialFailure:
                  summary: Some checks failed after other checks found alerts
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: '100234'
                    processing:
                      status: completed
                      classification: invoice
                      failure: null
                    alerts:
                      processing:
                        status: failed
                        skip_reason: null
                        failure:
                          code: some_alert_checks_failed
                          message: Some agreement checks could not be completed.
                      result: alerts_found
                      count: 2
                      resolution:
                        status: open
                        method: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                notInvoice:
                  summary: Document was not an invoice
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: null
                    processing:
                      status: completed
                      classification: not_invoice
                      failure: null
                    alerts:
                      processing:
                        status: skipped
                        skip_reason: not_an_invoice
                        failure: null
                      result: null
                      count: null
                      resolution: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                noApplicableAgreements:
                  summary: No applicable agreements
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: '100234'
                    processing:
                      status: completed
                      classification: invoice
                      failure: null
                    alerts:
                      processing:
                        status: skipped
                        skip_reason: no_applicable_agreements
                        failure: null
                      result: null
                      count: null
                      resolution: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                creditNote:
                  summary: Document is a credit note
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: CN-100234
                    processing:
                      status: completed
                      classification: credit_note
                      failure: null
                    alerts:
                      processing:
                        status: skipped
                        skip_reason: credit_note
                        failure: null
                      result: null
                      count: null
                      resolution: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                creditNoteMatched:
                  summary: Assessment was pre-empted by a matched credit note
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: '100234'
                    processing:
                      status: completed
                      classification: invoice
                      failure: null
                    alerts:
                      processing:
                        status: skipped
                        skip_reason: credit_note_matched
                        failure: null
                      result: null
                      count: null
                      resolution: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                invoiceFailure:
                  summary: Invoice processing failed
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: null
                    processing:
                      status: failed
                      classification: null
                      failure:
                        code: invoice_processing_failed
                        message: Watchdog could not process this document.
                    alerts:
                      processing:
                        status: skipped
                        skip_reason: invoice_processing_failed
                        failure: null
                      result: null
                      count: null
                      resolution: null
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                creditNoteResolution:
                  summary: Detected alerts were resolved by a credit note
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: '100234'
                    processing:
                      status: completed
                      classification: invoice
                      failure: null
                    alerts:
                      processing:
                        status: completed
                        skip_reason: null
                        failure: null
                      result: alerts_found
                      count: 7
                      resolution:
                        status: resolved
                        method: credit_note
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
                manualReviewResolution:
                  summary: Detected alerts were resolved through manual review
                  value:
                    invoice_id: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    invoice_number: '100234'
                    processing:
                      status: completed
                      classification: invoice
                      failure: null
                    alerts:
                      processing:
                        status: completed
                        skip_reason: null
                        failure: null
                      result: alerts_found
                      count: 2
                      resolution:
                        status: resolved
                        method: manual_review
                    invoice_url: >-
                      https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
                    created_at: '2026-08-12T07:44:20.000Z'
        '400':
          description: The invoice ID is not a valid UUID.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody_validation_error'
        '401':
          description: >-
            Authentication failed — missing, malformed, unknown, or revoked
            token. See `WWW-Authenticate` header per RFC 6750.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody_invalid_token'
        '403':
          description: >-
            Token is disabled (operator-controlled kill switch) or lacks the
            required scope.
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/ErrorBody_token_disabled'
                  - $ref: '#/components/schemas/ErrorBody_insufficient_scope'
        '404':
          description: >-
            Invoice not found. Missing, deleted, and cross-organization IDs are
            identical.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody_not_found'
        '429':
          description: >-
            Rate limit exceeded. Pre-auth IP cap is 300 req/min; per-token cap
            is 120 req/min. Response headers indicate when the caller may retry.
          headers:
            Retry-After:
              description: >-
                Seconds until the caller may retry. Only present on 429
                responses.
              schema:
                type: string
                example: '34'
            X-RateLimit-Limit:
              description: Maximum requests allowed in the current window.
              schema:
                type: string
                example: '300'
            X-RateLimit-Remaining:
              description: Requests remaining in the current window.
              schema:
                type: string
                example: '0'
            X-RateLimit-Reset:
              description: >-
                Unix timestamp in seconds when the current window resets. Divide
                by 1000 if you have a millisecond-precision clock.
              schema:
                type: string
                example: '1713793234'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody_rate_limit_exceeded'
        '500':
          description: Internal error reading invoice status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorBody_internal_error'
      security:
        - BearerAuth:
            - invoices:read
components:
  schemas:
    InvoiceStatusResponse:
      type: object
      properties:
        invoice_id:
          type: string
          format: uuid
          description: Watchdog invoice identifier returned by the upload endpoint.
          example: 7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
        invoice_number:
          type:
            - string
            - 'null'
          description: >-
            Invoice number extracted from the document. May be `null` before
            extraction or when no number can be identified; it is not a unique
            identifier.
          example: '100234'
        processing:
          anyOf:
            - type: object
              properties:
                status:
                  type: string
                  enum:
                    - pending
                    - processing
                classification:
                  type: 'null'
                failure:
                  type: 'null'
              required:
                - status
                - classification
                - failure
            - type: object
              properties:
                status:
                  type: string
                  enum:
                    - completed
                classification:
                  type: string
                  enum:
                    - invoice
                    - credit_note
                    - self_billed_invoice
                    - not_invoice
                failure:
                  type: 'null'
              required:
                - status
                - classification
                - failure
            - type: object
              properties:
                status:
                  type: string
                  enum:
                    - failed
                classification:
                  type: 'null'
                failure:
                  type: object
                  properties:
                    code:
                      type: string
                      enum:
                        - invoice_processing_failed
                    message:
                      type: string
                      enum:
                        - Watchdog could not process this document.
                  required:
                    - code
                    - message
              required:
                - status
                - classification
                - failure
        alerts:
          anyOf:
            - type: object
              properties:
                processing:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - pending
                        - processing
                    skip_reason:
                      type: 'null'
                    failure:
                      type: 'null'
                  required:
                    - status
                    - skip_reason
                    - failure
                result:
                  type: 'null'
                count:
                  type: 'null'
                resolution:
                  type: 'null'
              required:
                - processing
                - result
                - count
                - resolution
            - type: object
              properties:
                processing:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - pending
                        - processing
                    skip_reason:
                      type: 'null'
                    failure:
                      type: 'null'
                  required:
                    - status
                    - skip_reason
                    - failure
                result:
                  type: string
                  enum:
                    - alerts_found
                count:
                  type: integer
                  exclusiveMinimum: 0
                resolution:
                  anyOf:
                    - type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - open
                        method:
                          type: 'null'
                      required:
                        - status
                        - method
                    - type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - resolved
                        method:
                          type: string
                          enum:
                            - credit_note
                      required:
                        - status
                        - method
                    - type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - resolved
                        method:
                          type: string
                          enum:
                            - manual_review
                      required:
                        - status
                        - method
              required:
                - processing
                - result
                - count
                - resolution
            - type: object
              properties:
                processing:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - completed
                    skip_reason:
                      type: 'null'
                    failure:
                      type: 'null'
                  required:
                    - status
                    - skip_reason
                    - failure
                result:
                  type: string
                  enum:
                    - no_alerts_found
                count:
                  type: number
                  enum:
                    - 0
                resolution:
                  type: 'null'
              required:
                - processing
                - result
                - count
                - resolution
            - type: object
              properties:
                processing:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - completed
                    skip_reason:
                      type: 'null'
                    failure:
                      type: 'null'
                  required:
                    - status
                    - skip_reason
                    - failure
                result:
                  type: string
                  enum:
                    - alerts_found
                count:
                  type: integer
                  exclusiveMinimum: 0
                resolution:
                  anyOf:
                    - type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - open
                        method:
                          type: 'null'
                      required:
                        - status
                        - method
                    - type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - resolved
                        method:
                          type: string
                          enum:
                            - credit_note
                      required:
                        - status
                        - method
                    - type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - resolved
                        method:
                          type: string
                          enum:
                            - manual_review
                      required:
                        - status
                        - method
              required:
                - processing
                - result
                - count
                - resolution
            - type: object
              properties:
                processing:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - failed
                    skip_reason:
                      type: 'null'
                    failure:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                            - some_alert_checks_failed
                        message:
                          type: string
                          enum:
                            - Some agreement checks could not be completed.
                      required:
                        - code
                        - message
                  required:
                    - status
                    - skip_reason
                    - failure
                result:
                  type: 'null'
                count:
                  type: 'null'
                resolution:
                  type: 'null'
              required:
                - processing
                - result
                - count
                - resolution
            - type: object
              properties:
                processing:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - failed
                    skip_reason:
                      type: 'null'
                    failure:
                      type: object
                      properties:
                        code:
                          type: string
                          enum:
                            - some_alert_checks_failed
                        message:
                          type: string
                          enum:
                            - Some agreement checks could not be completed.
                      required:
                        - code
                        - message
                  required:
                    - status
                    - skip_reason
                    - failure
                result:
                  type: string
                  enum:
                    - alerts_found
                count:
                  type: integer
                  exclusiveMinimum: 0
                resolution:
                  anyOf:
                    - type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - open
                        method:
                          type: 'null'
                      required:
                        - status
                        - method
                    - type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - resolved
                        method:
                          type: string
                          enum:
                            - credit_note
                      required:
                        - status
                        - method
                    - type: object
                      properties:
                        status:
                          type: string
                          enum:
                            - resolved
                        method:
                          type: string
                          enum:
                            - manual_review
                      required:
                        - status
                        - method
              required:
                - processing
                - result
                - count
                - resolution
            - type: object
              properties:
                processing:
                  type: object
                  properties:
                    status:
                      type: string
                      enum:
                        - skipped
                    skip_reason:
                      type: string
                      enum:
                        - not_an_invoice
                        - invoice_processing_failed
                        - credit_note
                        - no_applicable_agreements
                        - credit_note_matched
                    failure:
                      type: 'null'
                  required:
                    - status
                    - skip_reason
                    - failure
                result:
                  type: 'null'
                count:
                  type: 'null'
                resolution:
                  type: 'null'
              required:
                - processing
                - result
                - count
                - resolution
          description: >-
            Aggregate alert-assessment summary across all applicable agreements.
            `count` preserves detected, non-superseded alerts even after review;
            `resolution` indicates whether they remain blocking. Individual
            alerts and agreement-level results are not exposed; use
            `invoice_url` to inspect them in Watchdog.
        invoice_url:
          type: string
          format: uri
          description: Absolute URL for reviewing the invoice and its alerts in Watchdog.
          example: >-
            https://app.watchdog.no/org_3AFsEYath1408oAK0EkJikS8qp1/invoices/7ad2c50d-2cc0-49a0-9a9c-6fa817c1fbcb
        created_at:
          type: string
          format: date-time
          description: When the invoice resource was created.
          example: '2026-08-12T07:44:20.000Z'
      required:
        - invoice_id
        - invoice_number
        - processing
        - alerts
        - invoice_url
        - created_at
    ErrorBody_validation_error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - validation_error
            message:
              type: string
            description:
              type: string
            request_id:
              type: string
          required:
            - code
            - message
            - request_id
      required:
        - error
    ErrorBody_invalid_token:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - invalid_token
            message:
              type: string
            description:
              type: string
            request_id:
              type: string
          required:
            - code
            - message
            - request_id
      required:
        - error
    ErrorBody_token_disabled:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - token_disabled
            message:
              type: string
            description:
              type: string
            request_id:
              type: string
          required:
            - code
            - message
            - request_id
      required:
        - error
    ErrorBody_insufficient_scope:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - insufficient_scope
            message:
              type: string
            description:
              type: string
            request_id:
              type: string
          required:
            - code
            - message
            - request_id
      required:
        - error
    ErrorBody_not_found:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - not_found
            message:
              type: string
            description:
              type: string
            request_id:
              type: string
          required:
            - code
            - message
            - request_id
      required:
        - error
    ErrorBody_rate_limit_exceeded:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - rate_limit_exceeded
            message:
              type: string
            description:
              type: string
            request_id:
              type: string
          required:
            - code
            - message
            - request_id
      required:
        - error
    ErrorBody_internal_error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - internal_error
            message:
              type: string
            description:
              type: string
            request_id:
              type: string
          required:
            - code
            - message
            - request_id
      required:
        - error
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >-
        API key from Settings → API Keys. Plaintext is shown once at creation
        and cannot be recovered. Header: `Authorization: Bearer wdg_<token>`.

````