bissl-at Lunch API

The Lunch API from bissl-at — 1 operation(s) for lunch.

Operations 1

GET /v1/lunch Lunch menus (Mittagsmenüs) served today or another day this week #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/bissl-at:bissl-at-lunch-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

bissl-at-lunch-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: 'Dishes, prices and lunch menus of restaurants, cafés and bars in Austria, read from each place''s own website. Free to use, but not to pass on, all or in large part, as your own collection of places'' menus and prices (a site, app or dataset); systematic or large-scale fetching, commercial market analysis, historical data and training AI models need a licence; text and data mining is reserved (§ 42h of the Austrian Copyright Act); photos and reviews are not included. Name bissl as the source and link to the place''s bissl page (`url`) wherever you show its data. Terms: https://bissl.at/en/api'
  title: bissl Lunch API
  version: '1'
servers:
- url: https://api.bissl.at
tags:
- name: Lunch
paths:
  /v1/lunch:
    get:
      operationId: findLunch
      parameters:
      - description: 'Keep to a map area: "west,south,east,north" in degrees - a town, a district, the streets around a place. Everywhere when left out.'
        in: query
        name: bbox
        schema:
          type: string
      - description: 'Only at places of this cuisine, as OpenStreetMap names it: "italian", "vietnamese".'
        in: query
        name: cuisine
        schema:
          type: string
      - description: '"2026-10-20": another day of this lunch week, Monday to Sunday (at the weekend, the coming week''s too). Today when left out; open_now only counts today.'
        in: query
        name: day
        schema:
          format: date
          type: string
      - description: 'Only dishes of this diet: vegan, or vegetarian (vegan dishes included).'
        in: query
        name: diet
        schema:
          anyOf:
          - description: A diet as a menu marks a dish, or the dish's name says it.
            oneOf:
            - enum:
              - vegan
              type: string
            - description: Vegetarian, vegan dishes included.
              enum:
              - vegetarian
              type: string
          - enum:
            - null
      - description: 'Only dishes whose menu lists their allergens and none of these letters: "A" gluten, "G" milk, "AG" both.'
        in: query
        name: free_of
        schema:
          type: string
      - description: 'The language of dish names, descriptions and section titles: de, the menus'' own, or en, as bissl translated them.'
        in: query
        name: lang
        schema:
          enum:
          - de
          - en
          type: string
      - description: The latitude of a point - the user's, or one they name - to measure distances from and sort nearest first; with `lon`.
        in: query
        name: lat
        schema:
          format: double
          type: number
      - description: 'Places to answer with: 1 to 30, 10 when left out.'
        in: query
        name: limit
        schema:
          format: int64
          type: integer
      - description: The longitude of that point; with `lat`.
        in: query
        name: lon
        schema:
          format: double
          type: number
      - description: Only dishes costing at most this much, in whole euros.
        in: query
        name: max_price
        schema:
          format: int64
          type: integer
      - description: Only dishes costing at least this much, in whole euros.
        in: query
        name: min_price
        schema:
          format: int64
          type: integer
      - description: 'Places to skip, for the next ones: 0 when left out.'
        in: query
        name: offset
        schema:
          format: int64
          type: integer
      - description: Only places open right now.
        in: query
        name: open_now
        schema:
          type: boolean
      - description: 'Words a dish must match, as people say them, German or English: "schnitzel", "vegan curry", "glutenfreie pizza". A diet, allergens or a cuisine among them are taken as filters; misspelt German words are put right when that finds something.'
        in: query
        name: q
        schema:
          type: string
      - description: The order of the places.
        in: query
        name: sort
        schema:
          anyOf:
          - oneOf:
            - enum:
              - name
              type: string
            - description: 'The most useful lunches first: with prices, at places open for lunch.'
              enum:
              - recommended
              type: string
            - description: Nearest to `lat`, `lon` first - the order whenever they are given, unless another.
              enum:
              - distance
              type: string
            - description: The cheapest dish first.
              enum:
              - price
              type: string
          - enum:
            - null
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LunchAnswer'
          description: The answer
        '400':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                required:
                - error
                type: object
          description: A parameter the API can't read, and why
        '404':
          content:
            application/json:
              schema:
                properties:
                  error:
                    type: string
                required:
                - error
                type: object
          description: No such place
        '429':
          description: 'Too many requests from this address: wait for Retry-After'
      summary: Lunch menus (Mittagsmenüs) served today or another day this week
      tags:
      - Lunch
components:
  schemas:
    ApiDiet:
      description: A diet as a menu marks a dish, or the dish's name says it.
      oneOf:
      - enum:
        - vegan
        type: string
      - description: Vegetarian, vegan dishes included.
        enum:
        - vegetarian
        type: string
    Place:
      description: A place to eat or drink, the same in every answer.
      properties:
        address:
          description: Street, house number, postcode and town; null when bissl has none.
          type:
          - string
          - 'null'
        area:
          description: 'Its district or town, to say where it is: "7. Neubau", "Mödling"; null outside every

            town bissl knows. No filter takes it.'
          type:
          - string
          - 'null'
        cuisines:
          description: 'Its cuisines as OpenStreetMap names them: austrian, italian, pizza, vietnamese...'
          items:
            type: string
          type: array
        distance_m:
          description: Metres from the point asked about (`lat`, `lon`), when one was given.
          format: int64
          type:
          - integer
          - 'null'
        kind:
          description: 'Its kind as OpenStreetMap tags it: restaurant, fast_food, cafe, bar, pub,

            biergarten, ice_cream, food_court, bakery or pastry.'
          type: string
        lat:
          format: double
          type: number
        lon:
          format: double
          type: number
        name:
          type: string
        open_now:
          description: Open right now by its opening hours (Vienna's time); null when bissl can't read them.
          type:
          - boolean
          - 'null'
        part_of:
          description: 'The larger place it is part of, as its own website names it - the hotel, castle or

            club its restaurant or bar is in: "Das Schloss an der Eisenstrasse". Null for none.'
          type:
          - string
          - 'null'
        price_level:
          description: '"€" to "€€€€" from its menu''s prices, against places of its kind - a restaurant''s

            mains, a café''s coffee and cake, a bar''s cocktails; null while bissl doesn''t know.'
          type:
          - string
          - 'null'
        slug:
          description: 'bissl''s name for the place: what `/v1/venues/{slug}` and `get_venue` take.'
          type: string
        url:
          description: 'Its page on bissl, with every menu: link to it.'
          type: string
      required:
      - slug
      - name
      - part_of
      - kind
      - cuisines
      - address
      - area
      - lat
      - lon
      - open_now
      - distance_m
      - price_level
      - url
      type: object
    Dish:
      description: A dish or drink on a menu, the same in every answer.
      properties:
        allergens:
          description: 'The allergen letters its menu lists, by the Austrian codes (A gluten, B

            crustaceans, C egg, D fish, E peanuts, F soy, G milk, H nuts, L celery, M mustard,

            N sesame, O sulphites, P lupin, R molluscs); null when the menu lists none for it,

            which is no promise it has none.'
          type:
          - string
          - 'null'
        checked_on:
          description: The day its menu was last read from the venue's website.
          format: date
          type:
          - string
          - 'null'
        description:
          type: string
        diet:
          anyOf:
          - $ref: '#/components/schemas/ApiDiet'
          - enum:
            - null
          description: Vegan or vegetarian as the menu marks it or its name says; null when neither.
        id:
          description: bissl's id of the dish on its menu.
          format: int64
          type: integer
        name:
          type: string
        prices:
          description: One per size or variant; none when the menu gives no price.
          items:
            $ref: '#/components/schemas/Price'
          type: array
        served_on:
          description: The day a lunch dish is served on; null for what the place always serves.
          format: date
          type:
          - string
          - 'null'
        url:
          description: The venue's bissl page with this dish marked.
          type: string
      required:
      - id
      - name
      - description
      - prices
      - diet
      - allergens
      - served_on
      - checked_on
      - url
      type: object
    PlaceDishes:
      description: 'A place and its dishes in an answer: the dishes a search found there, or its lunch.'
      properties:
        dishes:
          description: In the answer's order.
          items:
            $ref: '#/components/schemas/Dish'
          type: array
        more_dishes:
          description: More of them there, on its page.
          format: int64
          type: integer
        place:
          $ref: '#/components/schemas/Place'
        served:
          description: 'When its lunch is served, as its menu says: "11:00–14:30". Lunch only; null otherwise.'
          type:
          - string
          - 'null'
      required:
      - place
      - served
      - dishes
      - more_dishes
      type: object
    Price:
      description: 'A price of a dish: one per size or variant.'
      properties:
        note:
          description: 'What it is for, when the menu says: a size or a variant ("0,5 l", "klein").'
          type: string
        price:
          description: 'As the venue page writes it: "12,90 €".'
          type:
          - string
          - 'null'
        price_cents:
          description: In euro cents; null when the menu names a size without a price.
          format: int64
          type:
          - integer
          - 'null'
      required:
      - price_cents
      - price
      - note
      type: object
    LunchAnswer:
      properties:
        attribution:
          type: string
        corrected:
          description: 'The words put right when they found nothing as typed: "schnitzel" for "schnitzl".'
          type:
          - string
          - 'null'
        cuisine:
          type:
          - string
          - 'null'
        day:
          description: The day the lunch menus are for.
          format: date
          type: string
        diet:
          anyOf:
          - $ref: '#/components/schemas/ApiDiet'
          - enum:
            - null
          description: The filters in effect, asked for or taken from the words.
        free_of:
          type:
          - string
          - 'null'
        note:
          description: Why there is nothing, when there is a reason to say.
          type:
          - string
          - 'null'
        places:
          description: Each with its whole lunch that day - the dishes matching `q`, when it was given.
          items:
            $ref: '#/components/schemas/PlaceDishes'
          type: array
        searched:
          description: 'The words the dishes match, once a diet, allergens or a cuisine among them were taken

            as filters; null for none.'
          type:
          - string
          - 'null'
        total_dishes:
          format: int64
          type: integer
        total_places:
          description: Places serving lunch and their dishes, of which `places` holds `limit` from `offset` on.
          format: int64
          type: integer
      required:
      - searched
      - corrected
      - diet
      - free_of
      - cuisine
      - day
      - total_places
      - total_dishes
      - places
      - note
      - attribution
      type: object