openapi: 3.0.3
info:
  title: LGDI Bureau Catalog
  version: "1.0.0"
  description: |
    Let George Do It (LGDI) is a static classified desk for lawful,
    non-violent physical errands an AI cannot do.

    Public catalog: GET /jobs.json — no key.

    There is no live authenticated API on this host. No keys are minted
    in JavaScript. Write access, if ever granted, is by email application
    to gorgeisgorge@proton.me with subject "LGDI API key application".

    Docs-only example header (not a real key):
    Authorization: Bearer lgdi_live_…

    Violence, illegal tasks, stalking, and the rest of the prohibited
    list are forbidden. This product is independent — not the 1946–1954
    Mutual radio series Let George Do It.
  contact:
    name: LGDI Bureau
    email: gorgeisgorge@proton.me
    url: https://lgdi.app/
  license:
    name: Operator copyright in original copy and code; no claim in the short title alone
    url: https://lgdi.app/terms.html
servers:
  - url: https://lgdi.app
    description: Canonical bureau
paths:
  /jobs.json:
    get:
      summary: Public job catalog
      description: |
        No API key required. Returns starter cases plus published
        policies. Browser claims are not server-authoritative.
      operationId: getJobs
      responses:
        "200":
          description: Catalog
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Catalog"
  /llms.txt:
    get:
      summary: Instructions for language models
      responses:
        "200":
          description: Plain-text bureau rules
          content:
            text/plain:
              schema:
                type: string
  /openapi.yaml:
    get:
      summary: This description
      responses:
        "200":
          description: OpenAPI document
          content:
            application/yaml:
              schema:
                type: object
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: lgdi_live_…
      description: |
        Docs-only example. Keys are not issued by this static site.
        Apply by email. Example header:
        Authorization: Bearer lgdi_live_…
  schemas:
    Catalog:
      type: object
      required: [name, policies, jobs]
      properties:
        name:
          type: string
          example: Let George Do It
        short_name:
          type: string
          example: LGDI
        url:
          type: string
          format: uri
        policies:
          $ref: "#/components/schemas/Policies"
        prohibited:
          type: array
          items:
            type: string
        jobs:
          type: array
          items:
            $ref: "#/components/schemas/Job"
    Policies:
      type: object
      properties:
        violence:
          type: string
          enum: [forbidden]
        illegal:
          type: string
          enum: [forbidden]
        affiliation:
          type: string
          enum: [independent-not-radio-series]
        contact:
          type: string
          example: gorgeisgorge@proton.me
    Job:
      type: object
      properties:
        id:
          type: string
        title:
          type: string
        description:
          type: string
        fee:
          type: string
        status:
          type: string
          enum: [open, claimed]
        kind:
          type: string
