Place the order with the shop (like the checkout). Only after the customer confirmed the quoted order and accepted the terms (terms_url). Paid by card in advance on the shop's order page: returns the order number and order_url (with "Betal nu"; the shop gets the order when paid). The customer gets a confirmation e-mail when paid. With products with an age limit and no approved age_check_id, nothing is ordered: returns status age_check_required with the AltID card; call again with age_check_id when the age is confirmed.
View input schema
{
"type": "object",
"properties": {
"shop": {
"description": "The \"shop\" value from find_shops (not needed on a shop's own address <shop>.lenius.app/mcp)",
"type": "string",
"minLength": 1,
"maxLength": 100
},
"fulfillment": {
"type": "string",
"enum": [
"pickup",
"delivery"
]
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD (from available_times)"
},
"time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "HH:MM (from available_times)"
},
"items": {
"minItems": 1,
"maxItems": 50,
"type": "array",
"items": {
"type": "object",
"properties": {
"product_id": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "Product id from get_menu"
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 99
},
"options": {
"description": "Answers to the product's options from get_menu (option_id + choice_id, option_id + text, or option_id + choices for choose_many). Required options must be answered; ask the customer, never pick for them.",
"maxItems": 20,
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"option_id": {
"type": "string",
"minLength": 1,
"maxLength": 32
},
"choice_id": {
"type": "string",
"minLength": 1,
"maxLength": 32,
"description": "choice_id from get_menu"
}
},
"required": [
"option_id",
"choice_id"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"option_id": {
"type": "string",
"minLength": 1,
"maxLength": 32
},
"text": {
"type": "string",
"maxLength": 500,
"description": "The customer's own words, e.g. \"uden løg\""
}
},
"required": [
"option_id",
"text"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"option_id": {
"type": "string",
"minLength": 1,
"maxLength": 32
},
"choices": {
"maxItems": 100,
"type": "array",
"items": {
"type": "object",
"properties": {
"choice_id": {
"type": "string",
"minLength": 1,
"maxLength": 32
},
"quantity": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "1 unless the option has quantities"
}
},
"required": [
"choice_id",
"quantity"
],
"additionalProperties": false
},
"description": "choose_many: the chosen choices; the total must be between min_total and max_total"
}
},
"required": [
"option_id",
"choices"
],
"additionalProperties": false
}
]
}
}
},
"required": [
"product_id",
"quantity"
]
}
},
"address": {
"description": "Required for delivery",
"type": "object",
"properties": {
"street": {
"type": "string",
"minLength": 2,
"maxLength": 120,
"description": "Street and number"
},
"postal_code": {
"type": "string",
"minLength": 3,
"maxLength": 10
},
"city": {
"type": "string",
"minLength": 2,
"maxLength": 60
}
},
"required": [
"street",
"postal_code",
"city"
]
},
"other_stops": {
"description": "The other orders you are placing for the customer in this conversation (other shops, same day): used only to warn when they are too far apart in time (trip_warnings). Nothing is looked up about the customer.",
"maxItems": 10,
"type": "array",
"items": {
"type": "object",
"properties": {
"shop": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "The \"shop\" value from find_shops"
},
"fulfillment": {
"type": "string",
"enum": [
"pickup",
"delivery"
]
},
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$"
},
"time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$"
},
"address": {
"description": "Required for delivery",
"type": "object",
"properties": {
"street": {
"type": "string",
"minLength": 2,
"maxLength": 120,
"description": "Street and number"
},
"postal_code": {
"type": "string",
"minLength": 3,
"maxLength": 10
},
"city": {
"type": "string",
"minLength": 2,
"maxLength": 60
}
},
"required": [
"street",
"postal_code",
"city"
]
}
},
"required": [
"shop",
"fulfillment",
"date",
"time"
]
}
},
"customer": {
"description": "Required unless the customer is logged in on this shop (then taken from the account; my_profile shows it)",
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 2,
"maxLength": 100
},
"email": {
"type": "string",
"maxLength": 200,
"format": "email",
"pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
},
"phone": {
"type": "string",
"minLength": 8,
"maxLength": 20,
"description": "Danish phone number, e.g. \"12 34 56 78\""
}
},
"required": [
"name",
"email",
"phone"
]
},
"comment": {
"description": "A note for the shop, e.g. \"no onions\"",
"type": "string",
"maxLength": 500
},
"accepted_terms": {
"type": "boolean",
"description": "true when the customer has accepted the shop's terms (terms_url)"
},
"age_check_id": {
"description": "Products with an age limit: the approved age check (from start_age_check or the age_check_required card); one age check can be reused for 30 minutes across shops",
"type": "string",
"minLength": 1,
"maxLength": 64
}
},
"required": [
"fulfillment",
"date",
"time",
"items",
"accepted_terms"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}