Tandoor Recipes · OpenAPI Overlay 1.0.0

API Evangelist enhancements for the Tandoor API

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

What the actions change

x-dry-run-forx-agent-safetyx-api-evangelistserversdescriptionx-token-endpointssummaryx-api-evangelist-note

Targets 8

$.info
$
$.components.securitySchemes.ApiKeyAuth
$.paths['/api/recipe/{id}/cascading/'].get
$.paths['/api/recipe/{id}/protecting/'].get
$.paths['/api/recipe/{id}/nulling/'].get
$.paths['/api/recipe/'].get
$.paths['/api/meal-plan/ical/'].get

OpenAPI Overlay

Raw ↑
overlay: 1.0.0
info:
  title: API Evangelist enhancements for the Tandoor API
  version: 1.0.0
x-provenance:
  generated: '2026-08-27'
  method: generated
  source: openapi/tandoor-api-openapi.yml
  extends: openapi/tandoor-api-openapi.yml
  note: >-
    This overlay carries API Evangelist's additions ONLY. It never mutates Tandoor's own contract on
    disk. Every value below is either an observed fact (the server host, the media type, the live
    document URL) or a label for behaviour already described in Tandoor's own operation descriptions
    (the delete-impact endpoints). No error responses, examples or schemas are invented — the fact
    that the contract declares none is recorded as a finding in errors/tandoor-problem-types.yml, not
    papered over here.
actions:
  - target: $.info
    description: >-
      Record where this document was actually fetched from and what it describes, since Tandoor's own
      info block carries only a title and the running build number.
    update:
      x-api-evangelist:
        harvested_from: https://app.tandoor.dev/openapi/
        harvested_at: '2026-08-27'
        harvest_status: 200
        content_type: application/vnd.oai.openapi
        product: Tandoor Recipes
        vendor: Tandoor Recipes (Benedikt Sienz, Falkensee, Germany)
        deployment_model: self-hosted-first-with-hosted-option
        documentation: https://docs.tandoor.dev/
        source_code: https://github.com/TandoorRecipes/recipes
        operations: 462
        paths: 244
        schemas: 244
  - target: $
    description: >-
      The published document declares no servers[]. Tandoor is deployed per-instance, so the correct
      server list is a template plus the vendor's own hosted instance. Both entries below are
      observed, not guessed: app.tandoor.dev is where this document was fetched, and the {instance}
      form is how every self-hosted deployment is addressed.
    update:
      servers:
        - url: https://app.tandoor.dev
          description: Tandoor's hosted service. Requires an account; the OpenAPI document itself is public.
        - url: https://{instance}
          description: Any self-hosted Tandoor instance. The API lives under /api/ and the contract under /openapi/.
          variables:
            instance:
              default: tandoor.example.com
              description: Hostname of the Tandoor instance you are integrating with.
  - target: $.components.securitySchemes.ApiKeyAuth
    description: >-
      Tandoor declares the scheme but not how to obtain or format the credential. Both facts come from
      the contract itself (/api/access-token/, POST /api-token-auth/).
    update:
      description: >-
        An access token sent in the Authorization request header. Tokens are created through
        /api/access-token/ in the application, or minted by POSTing {username, password} to
        /api-token-auth/. Session-cookie authentication also works for browser clients.
      x-token-endpoints:
        - POST /api-token-auth/
        - POST /api/access-token/
  - target: $.paths['/api/recipe/{id}/cascading/'].get
    description: Label Tandoor's delete-impact preview as a dry run so agent tooling can find it.
    update:
      x-dry-run-for: DELETE /api/recipe/{id}/
      x-agent-safety: >-
        Read-only preview of what a delete would destroy. Call this before apiRecipeDestroy.
  - target: $.paths['/api/recipe/{id}/protecting/'].get
    description: Label the delete-blocking preview.
    update:
      x-dry-run-for: DELETE /api/recipe/{id}/
      x-agent-safety: >-
        Lists the objects that will make the delete FAIL. A non-empty result means the delete is
        refused, not that it is dangerous.
  - target: $.paths['/api/recipe/{id}/nulling/'].get
    description: Label the reference-nulling preview.
    update:
      x-dry-run-for: DELETE /api/recipe/{id}/
      x-agent-safety: >-
        Lists the objects that will keep existing but lose their reference to this one.
  - target: $.paths['/api/recipe/'].get
    description: >-
      drf-spectacular generates no summary for any operation in this contract. Adding one to the most
      used operation makes the entry point legible without touching Tandoor's own document.
    update:
      summary: Search and list recipes
      x-api-evangelist-note: >-
        The richest filter surface in the API — free-text `query`, plus five-way keyword and food
        modifiers (or/and/or_not/and_not), books, rating, timescooked, makenow, new and random.
        Paginated with page/page_size.
  - target: $.paths['/api/meal-plan/ical/'].get
    description: Flag the only non-JSON response in the contract.
    update:
      x-media-type: text/calendar
      x-standard: RFC 5545 (iCalendar)