# Combo meals card

> Canonical HTML: https://screenrig.ai/docs/cards/combo-meals/

The numbered meal deals of a quick-service board: photo, what is in each combo, the price with the saving, the upsize step and the calories.

Category: Food and drink. Tags: Restaurants and cafes, Stores, Prices and rates.

## Previews

![Combo meals](/cards/combo-meals/v1/screenshots/canvas-bloom.webp?sha=466ac93a0c56b2d0fab6633a35372cf8f9d6c415138e3a6241c74a66b83dd070)

Canvas

![Combo meals](/cards/combo-meals/v1/screenshots/corner-bloom.webp?sha=f5792638cee9386a355db358a4808b1dbbd3ef479a110b1d29a1718c056737c4)

Corner

![Combo meals](/cards/combo-meals/v1/screenshots/chip-bloom.webp?sha=0fb2344b9a7b4c0c5e2648084a561995dfc227150c79fd317d58a0dab3cd7863)

Chip

## Views and forms

Views: canvas, corner, chip. Canvas forms: landscape, portrait, square, strip.

[Card views, themes and publishing](/docs/cards/). [Browse the gallery](/apps/#cards).

## Data and privacy

This card uses its configured properties and live card data.

## Properties

For theme, background, accent and position, see [Common properties](/docs/cards/#common-properties).

Set static properties in `params`. Bind `data` to a project card data key for live values; that document holds only dynamic properties. Without a data key, put the complete configuration in `params`. Nested rows describe the contents of their parent property.

### Static properties

| Name | Type | Default | Values and limits | Description |
| --- | --- | --- | --- | --- |
| `title` | string | `"Combo meals"` | maxLength: `40` |  |
| `currency` | string | `"$"` | maxLength: `3` |  |
| `decimals` | number, string | `"auto"` | `"auto"`, `0`, `1`, `2` | auto uses whole numbers when every price is whole. |
| `perPage` | integer | `0` | minimum: `0`; maximum: `8` | Combos on a page. 0 sets itself: four across in landscape, a column in portrait. |
| `pageSeconds` | number | `10` | minimum: `5`; maximum: `120` | How long a page stays when the combos do not fit one page. |
| `footnote` | string | `""` | maxLength: `120` | A line along the foot, for example Prices include tax. |

### Dynamic properties

| Name | Type | Default | Values and limits | Description |
| --- | --- | --- | --- | --- |
| `combos` | array | `[{"name":"Smoky stack","items":["Double smoky burger","Large fries","Drink"],"price":10.99,"was":13.47,"upsize":{"label":"Large","add":1.2},"kcal":1240,"badge":"Popular"},{"name":"Crispy chicken","items":["Crispy chicken sandwich","Fries","Drink"],"price":9.49,"was":11.97,"upsize":{"label":"Large","add":1.2},"kcal":1080},{"name":"Garden bowl","items":["Grain bowl","Fruit cup","Drink"],"price":11.25,"was":13.5,"upsize":{"label":"Large","add":1.5},"kcal":760},{"name":"Little one","items":["Mini burger","Apple slices","Juice box"],"price":6.25,"was":7.75,"kcal":520}]` | maxItems: `24` | The combos, in board order. |
| `combos[].number` | string |  | maxLength: `4` | The number on the board. Empty counts 1, 2, 3. |
| `combos[].name` | string |  | minLength: `1`; maxLength: `120`; Required |  |
| `combos[].items` | array |  | maxItems: `6` | What is in the combo, one line each. |
| `combos[].price` | number, null |  | minimum: `0` | The combo price. |
| `combos[].was` | number, null |  | minimum: `0` | The same items bought one by one; the saving is worked out. |
| `combos[].upsize` | object, null |  | additionalProperties: `false` | The upsize step, for example Large +1.20. |
| `combos[].upsize.label` | string |  | maxLength: `24` |  |
| `combos[].upsize.add` | number, null |  | minimum: `0` |  |
| `combos[].kcal` | number, null |  | minimum: `0` |  |
| `combos[].image` | string |  | maxLength: `200` | A project media reference (media:<id>). Empty shows the theme's tile with a food icon. |
| `combos[].badge` | string |  | maxLength: `16` | A short mark on the photo, for example Popular. |
| `combos[].soldOut` | boolean | `false` |  |  |

## Canvas example

Add this item to a playlist page’s `primitives`. [Publish the playlist and assign a screen](/docs/cards/#publish-a-card-canvas).

```json
{
  "id": "combo-meals",
  "primitive": "card",
  "card": "combo-meals",
  "major": 1,
  "params": {
    "theme": "neomustard"
  },
  "rect": {
    "x": 0,
    "y": 0,
    "width": 1920,
    "height": 1080
  },
  "layer": 0,
  "content_fit": "fill",
  "data": "combo-meals-main"
}
```

## Write live data

Create this document before showing the card, then replace it to update the screen without republishing. Use the same project as the playlist. Supply your API authorization through the environment; see [API authentication](/docs/authentication/).

```console
curl --request PUT "https://api.screenrig.ai/api/card-data/combo-meals-main" \
  --header "Authorization: Bearer $SCREENRIG_TOKEN" \
  --header "ScreenRig-Project: $SCREENRIG_PROJECT" \
  --header "Content-Type: application/json" \
  --data '{"document":{"combos":[{"name":"Smoky stack","items":["Double smoky burger","Large fries","Drink"],"price":10.99,"was":13.47,"upsize":{"label":"Large","add":1.2},"kcal":1240,"badge":"Popular"},{"name":"Crispy chicken","items":["Crispy chicken sandwich","Fries","Drink"],"price":9.49,"was":11.97,"upsize":{"label":"Large","add":1.2},"kcal":1080},{"name":"Garden bowl","items":["Grain bowl","Fruit cup","Drink"],"price":11.25,"was":13.5,"upsize":{"label":"Large","add":1.5},"kcal":760},{"name":"Little one","items":["Mini burger","Apple slices","Juice box"],"price":6.25,"was":7.75,"kcal":520}]}}'
```
