Recipe: a restaurant or café
A complete request body for a place: reserve first, then menu, directions, hours, delivery, and a chat button.
People open this from a story or a search on their phone, usually hungry and usually now. The page answers "can I come, and how" before anything else.
{
"username": "osteria-lume",
"locale": "en",
"page": {
"displayName": "Osteria Lume",
"bio": "Small plates and natural wine in Kreuzberg. Tue–Sun from 18:00.",
"templateId": "photo",
"layout": "grid",
"blocks": [
{
"type": "link",
"label": "Reserve a table",
"url": "https://reserve.example/lume",
"featured": true,
"path": "book"
},
{
"type": "link",
"label": "Menu",
"url": "https://lume.example/menu.pdf",
"note": "Updated weekly"
},
{
"type": "link",
"label": "Find us",
"url": "https://maps.google.com/?q=Osteria+Lume",
"note": "Reichenberger Str. 12"
},
{
"type": "link",
"label": "Order delivery",
"url": "https://delivery.example/lume"
},
{
"type": "link",
"label": "Call to reserve",
"url": "tel:+4930123456",
"note": "From 16:00"
},
{
"type": "messenger",
"platform": "whatsapp",
"handle": "+4915112345678",
"label": "Groups of 8+ · ask here"
},
{
"type": "text",
"variant": "paragraph",
"content": "Closed on Mondays. Kitchen until 22:30."
},
{
"type": "socialRow",
"items": [
{
"platform": "instagram",
"url": "https://instagram.com/osterialume"
}
]
}
]
},
"avatarUrl": "https://example.com/lume-logo.png"
}Why it is shaped this way
- Reserve is the featured link and has a short path (
/book) for the card on the table. - The
phototemplate withgridlayout gives every link a picture — addimagekeys after uploading dish photos withkind: "card". - Hours are a
textparagraph, not a link: they are read, not tapped. - One messenger button for the enquiry that a booking widget cannot handle, and a
tel:link for the people who would rather call.
Replace every URL and every word with the person's own. Then POST https://tapmy.link/api/agent/pages, read page.md, hand over.