> ## Documentation Index
> Fetch the complete documentation index at: https://docs.heylua.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# payment

> A checkout, booking, or invoice link rendered as a payment button

`payment` turns a URL into a payment button on the channels that have one. The platform teaches this block on every text channel; see [Response formatting](/channels/formatting/overview). The URL comes from your payment provider, typically returned by a tool.

*Verified against lua-cli 3.33.0.*

## Syntax

```text theme={null}
::: payment
[Label](https://pay.example.com/session)
:::
```

## Fields

| Field     | Required | Notes                                                                                                                                                                                     |
| --------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `[Label]` | Yes      | Button text in email sent from your own address only. The web widget shows a fixed **Open payment** button; WhatsApp, Slack, and Teams show **Pay Now**, Messenger and Instagram **Pay**. |
| `(url)`   | Yes      | Public HTTPS URL of the checkout page.                                                                                                                                                    |

## Example

```text theme={null}
Your order is ready to pay.

::: payment
[Pay $1,299 for order 4821](https://checkout.stripe.com/c/pay/cs_test_abc123)
:::
```

<Frame caption="payment rendered as a button in the web widget">
  <img src="https://mintcdn.com/luaglobal/5airD3u2P6mv3Ovl/images/formatting/payment-link.png?fit=max&auto=format&n=5airD3u2P6mv3Ovl&q=85&s=c6d124206009db126012c2729bfe5955" alt="Payment button rendered in the web widget" width="3024" height="544" data-path="images/formatting/payment-link.png" />
</Frame>

## Where it renders

| Channel                      | Behavior                                                                                |
| ---------------------------- | --------------------------------------------------------------------------------------- |
| Web widget                   | **Open payment** button that opens the URL in a popup, or a new tab on phones           |
| Email (your own address)     | Button with the label                                                                   |
| WhatsApp                     | Call-to-action URL button labelled **Pay Now**, with the reply text as the message body |
| Messenger, Instagram         | Button template with a **Pay** button per link                                          |
| Slack, Teams                 | **Pay Now** button; any `actions` block in the same reply is dropped                    |
| iMessage                     | The URL as plain text                                                                   |
| MessageBird                  | The URL as text, prefixed `💳 Pay Now:`                                                 |
| RCS, email (generated inbox) | Dropped; put the link in the text                                                       |
| SMS, Front                   | Raw text                                                                                |

Only the first `::: payment` block, and on WhatsApp only its first link, is rendered on the messaging channels.

## See also

* [Response formatting](/channels/formatting/overview) — the per-channel matrix
* [actions](/channels/formatting/actions) — follow-up choices that don't open a URL
* [links](/channels/formatting/links) — URLs that are not payments
