# Automation variables

> Every {variable} you can put in an automation message, subject, recipient or HTTP request, with what it holds and an example value.
>
> Source: https://docs.bcl.my/automation-variables/

Variables are placeholders in curly brackets, such as `{name}`, that BCL swaps for real values when the automation runs. They work in every text field of a step: recipients, subjects, message bodies, spreadsheet columns, and the URL, headers and body of an HTTP request.

## Find and insert a variable

Next to each field that accepts variables, click **Variables**. The list shows only the variables of your automation's trigger, grouped and searchable. Click one to copy it, then paste it where you want it.

*(Screenshot: The Variables list open next to Recipient Email, showing the General group and the fields of a lead form)*

A few rules apply everywhere:

- Type variables exactly, with both brackets and no spaces: `{order_number}`, not `{ order_number }` or `{Order Number}`.
- A variable that does not exist for the trigger, or has no value, becomes empty. BCL does not show an error, except when a recipient ends up empty: the step then fails with a message in the history.
- Test messages use sample data, such as "Ahmad Ali" and "RM 150.00". Real runs use the real values below.

## Payment variables

These work with **Payment Initiated**, **Payment Successful**, **Payment Failed**, **Payment Cancelled**, **Payment Completed** and **Status Changed**. The examples come from a test purchase on the demo account.

| Variable | What it holds | Example |
| --- | --- | --- |
| `{name}` | Customer name | Farah Idris |
| `{email}` | Customer email | farah.idris@example.com |
| `{phone}` | Customer phone, with country code | +60133456784 |
| `{form_title}` | Form title | Kopi Kampung Home Brewing E-Guide |
| `{form_type}` | Form type | Payment Form |
| `{form_url}` | Link to the form | `https://<your-subdomain>.bcl.my/form/kopi-kampung-home-brewing-e-guide` |
| `{form_featured_image}` | Link to the form's featured image | https://.../featured.jpg |
| `{order_number}` | Order number | LINK-05851 |
| `{reference_id}` | Order number (same as above) | LINK-05851 |
| `{created_at}` | When the transaction was created | 2026-09-27 22:15:55 |
| `{payment_date}` | When it was paid | 2026-09-27 22:15:56 |
| `{payment_method}` | Payment method | FPX |
| `{payment_status}` | Status in words | Successful |
| `{status_description}` | The bank's status text | Approved |
| `{receipt_url}` | Link to the receipt page | `https://<your-subdomain>.bcl.my/receipts/LINK-05851` |
| `{amount}` | Amount paid, formatted | RM 15.00 |
| `{subtotal}` | Subtotal, formatted | RM 15.00 |
| `{discount}` | Discount, formatted | RM 5.00 |
| `{shipping_cost}` | Shipping cost, formatted | RM 10.00 |
| `{amount_value}` | Amount paid, number only | 15.00 |
| `{subtotal_amount}` | Subtotal, number only | 15.00 |
| `{discount_amount}` | Discount, number only | 0.00 |
| `{fee_amount}` | Gateway fee, number only | 0.00 |
| `{shipping_name}` | Shipping method | Standard Delivery |
| `{address}` | Full shipping address on one line | 123, Jalan Ampang, 50450, Kuala Lumpur, Malaysia |
| `{address_line1}`, `{address_line2}` | Address lines | 123, Jalan Ampang |
| `{city}`, `{state}`, `{postal_code}`, `{country}` | Parts of the address | Kuala Lumpur |
| `{items_list}` | One line per item with quantity and price | 1x Home Brewing Guide - RM 15.00 |
| `{items_summary}` | Items on one line, for SMS | 1x Home Brewing Guide |
| `{items_json}` | Items as JSON, for HTTP requests | `[{"sku":"Home Brewing Guide","name":"Home Brewing Guide","quantity":1,"price":15}]` |
| `{total_items}` | Number of item lines | 1 |
| `{product_table}` | A formatted table of items with an **Access** button for digital items, for email | (table) |
| `{business_name}` | Your business name | KOPI KAMPUNG SDN. BHD. |

`{receipt_url}` is useful after a failed or cancelled payment: the receipt page then offers the customer a button to try the payment again.

### Form fields

Each custom field on a payment, event or booking form becomes a variable named after the field's name, for example `{company_name}` for a field named `company_name`. Uploaded files show as a link. These do not appear in the **Variables** list, so check the field name in the form builder.

## Item variables

For each item in the order, replace `N` with its position (1 for the first item, 2 for the second). For protected content, `M` is the content number within that item.

| Variable | What it holds | Example |
| --- | --- | --- |
| `{product_name_N}` | Item name | `{product_name_1}` = Home Brewing Guide |
| `{product_image_N}` | Link to the item image | https://.../beans.jpg |
| `{download_link_N}` | The item's **Download Link** | https://drive.google.com/... |
| `{protected_content_url_N_M}` | The buyer's private link to protected content | `{protected_content_url_1_1}` = `https://<your-subdomain>.bcl.my/content/KLxu9odA...` |
| `{protected_content_title_N_M}` | Title of that content | Kopi Kampung Home Brewing Guide |
| `{access_finder_url_N_M}` | Page where the buyer can get their link again by email | `https://<your-subdomain>.bcl.my/content/O6FYW1GU/access` |

An item without a download link or protected content leaves those variables empty.

## Shipping variables

**Order Shipped** has all payment variables above plus these two:

| Variable | What it holds | Example |
| --- | --- | --- |
| `{tracking_number}` | Tracking number | TRK123456789MY |
| `{courier}` | Courier name | Poslaju |

## Lead form variables

**New Lead Received** has four general variables plus one variable per field of your lead forms.

| Variable | What it holds | Example |
| --- | --- | --- |
| `{form_title}` | Lead form title | Kopi Kampung Wholesale Enquiry |
| `{submission_id}` | Submission code | SUB-12345 |
| `{submission_datetime}` | When it was submitted | 27/09/2026 21:32 |
| `{business_name}` | Your business name | KOPI KAMPUNG SDN. BHD. |
| `{field_name:id}` | The answer to one field | `{email_address:2}` = aisyah@example.com |

Field variables use the field's name and its id, joined by a colon, such as `{full_name:1}` or `{monthly_volume:5}`. The **Variables** list shows them grouped by form, with fields that every selected form shares under **On every form**. Checkbox answers are joined with commas. File and signature fields are not available.

## Event variables

**Participant Created**, **Participant Checked In** and **Certificate Generated** share these variables. `{certificate_url}` is filled for **Certificate Generated**.

| Variable | What it holds | Example |
| --- | --- | --- |
| `{attendee_name}` | Participant name | Zainab Harun |
| `{attendee_email}` | Participant email | zainab.harun@example.com |
| `{attendee_phone}` | Participant phone | +60133456786 |
| `{ticket_number}` | Ticket number | DDGO36C1 |
| `{ticket_name}` | Ticket type | Normal |
| `{ticket_url}` | Link to the ticket | `https://<your-subdomain>.bcl.my/ticket/DDGO36C1/view` |
| `{seat_number}` | Seat, for seated events | B1-006 |
| `{event_name}` | Event name | Kopi Kampung Coffee Festival 2026 |
| `{event_type}` | Event type | seating |
| `{event_date}`, `{event_start_date}` | Start date | 17/10/2026 |
| `{event_end_date}` | End date | 17/10/2026 |
| `{event_time}` | Start time | 09:00 |
| `{event_location}`, `{event_address}` | Venue location | Dewan Kopi Kampung, Jalan Kopi 1, 50450 Kuala Lumpur |
| `{price_paid}` | Price paid, formatted | RM 35.00 |
| `{original_price}` | Ticket price before discount | RM 35.00 |
| `{order_number}` | Order number | LINK-05856 |
| `{created_at}` | When the participant was created | 27/09/2026 22:20 |
| `{certificate_url}` | Link to the certificate | https://... |
| `{business_name}` | Your business name | KOPI KAMPUNG SDN. BHD. |

Attendee fields you add to the event form are available as `{attendance_<field name>}`, for example `{attendance_favourite_coffee}`. The buyer's custom fields work as on payment forms.

## Affiliate variables

| Variable | Triggers | What it holds | Example |
| --- | --- | --- | --- |
| `{affiliate_id}` | All affiliate triggers | Affiliate ID | 12 |
| `{affiliate_name}` | All affiliate triggers | Affiliate name | Amir Rashid |
| `{affiliate_email}` | All affiliate triggers | Affiliate email | amir@example.com |
| `{affiliate_phone}` | All affiliate triggers | Affiliate phone | 60123456789 |
| `{business_name}` | All affiliate triggers | Your business name | KOPI KAMPUNG SDN. BHD. |
| `{referral_id}` | Referral Approved, Referral Rejected | Referral ID | 34 |
| `{order_number}` | Referral Approved, Referral Rejected | Order that earned the referral | LINK-12345 |
| `{amount}` | Referral Approved, Referral Rejected | Order amount | RM 150.00 |
| `{commission_formatted}` | Referral Approved, Referral Rejected | Commission | RM 15.00 |
| `{status}` | Referral Approved, Referral Rejected | Referral status | approved |
| `{referral_source}` | Referral Approved, Referral Rejected | Where the referral came from | Website |
| `{payout_id}` | Payout Requested | Payout request ID | 7 |
| `{payout_formatted}` | Payout Requested | Payout amount | RM 500.00 |
| `{payout_status}` | Payout Requested | Payout status | pending |
| `{requested_at}` | Payout Requested | When it was requested | 27/09/2026 10:15 |
| `{referral_count}` | Payout Requested | The affiliate's total referrals | 18 |

## Tips

A few habits save time with variables:

- **Use number-only amounts in HTTP requests.** Use `{amount_value}` there, and the formatted `{amount}` in messages.
- **Check a real run's data.** In the automation's history, open an execution and look at **Execution Data**: it lists every variable with the value it had, which is the quickest way to spot an empty one.
- **Keep SMS short with `{items_summary}`.** Use `{product_table}` only in emails.

## Common issues

### Why does my HTTP request send an empty name and email for lead form fields?

Lead form fields need their name and id, such as {email_address:2}. {email} or {email_address} alone do not exist for leads, and a variable that does not exist becomes empty without an error. Copy the exact key from the Variables list.

### How do I put the download link of each product in the email?

Use {product_table} for a table with an Access button per item, or the item variables such as {download_link_1} and {protected_content_url_1_1} to place each link yourself.

### Can I show the customer's answer to a custom field on my payment form?

Yes. Each custom field on a payment, event or booking form becomes a variable named after the field, for example {company_name}. Test it with a real purchase and check the execution data in the history.
