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

# Receipt Configuration & Download

> How the customer-facing receipt works end to end: what the customer chooses when downloading (language, company name for expense claims, and why it can only be set once), what you can configure in the Portal, whether a configuration change affects past transactions, receipt URLs, and the transactions your configuration cannot touch.

This page covers the receipt as a document: what the customer sees when they
download it, and what you control about its content. Viewing and emailing a
receipt from a transaction, and the delivery statuses of that email, are
covered by the Receipts: View, Send & Configure page.

## What does the customer choose when they download a receipt?

Whichever entry point they arrive from, they land on the same receipt page and
get the same dialog:

| Choice | Behavior |
| - | - |
| **Language** | English is always offered and preselected. If the order's own language is not English, it is offered as a second option and is also preselected. At least one language must stay selected |
| **Company name** | Optional free text per selected language — the name that should appear on the receipt, typically for an expense claim |

Selecting both languages downloads **both receipts** in one action. The company
name is entered per language, because a company's legal name in English and in
the local language are usually not the same string.

The company-name field only appears for receipts that carry that block. If the
customer does not see it, that transaction's receipt does not support it.

## Why can't the customer correct the company name they typed?

Because a company name is **locked once submitted, per language**. It is
deliberate: the receipt is an accounting document, and letting the same
transaction produce two receipts with two different bill-to names is exactly
the ambiguity a receipt is supposed to remove.

The rules in full:

| Action | Result |
| - | - |
| First submission for a language | Accepted and stored |
| Same language, **same** value again | Succeeds, nothing changes — safe to retry |
| Same language, **different** value | Rejected: `008001B115` — "Receipt company name has already been submitted and cannot be changed. Please download the receipt with the submitted name." |
| A **different** language, first time | Accepted — languages are independent |

Once a language has a stored name, the input is no longer offered for it: the
download simply uses the stored value.

The name is bound to **that order and that language**. A new order starts
clean, and nothing is inherited from a previous purchase by the same customer —
so a customer who needs a corrected name needs a new transaction, not a new
download.

Validation on the value:

| Rule | Limit |
| - | - |
| Maximum length | **200 characters** |
| Leading/trailing spaces | Trimmed before storing |
| Disallowed | `<` and `>`, and control characters |

## The receipt link my customer has does not open. What are the valid link shapes?

Two forms exist and both are live:

| Shape | What it is |
| - | - |
| `/receipts/form?orderKey=…&locale=…` | The intermediate receipt page — the language and company-name dialog, then the download |
| `/receipts/{orderKey}.pdf?locale=…&tz=…` | The receipt document itself |

The intermediate page refuses to open in three cases, and the message says
which: the order key is missing, the order is not in a successful state, or the
transaction has no receipt. `008001B116` — "Receipt link expired" — means the
link is past its window; issue a fresh one from the Portal or from the order
inquiry response.

## What can I configure about the receipt content?

In the Merchant Portal, open **Settings → Receipt Configuration**. Configurable
blocks:

| Block | Fields |
| - | - |
| **Receipt header** | Document title, merchant display name, merchant logo |
| **Billed to (customer info)** | Show customer name (on/off), show customer email (on/off) — the values themselves come from the transaction and cannot be edited |
| **From (service entity)** | Entity name, tax ID, address |
| **Footer & support** | Support copy, support website |

Field rules:

| Field | Rule |
| - | - |
| Document title | Up to **50 characters**. `<` and `>` are rejected. Empty falls back to `Receipt`. This is how you get `Tax Invoice`, `Invoice`, `Order Confirmation` and so on |
| Every other text field | Up to **128 characters**. Empty fields are **hidden** on the receipt rather than rendered blank |
| Support website | Inserted into the support copy at a `{website}` placeholder |
| Merchant logo | Leave empty to hide the logo |
| **Receipt Enabled** | Per template: whether transactions using it produce a receipt at all |

The fee row and subscription information are rendered by the system when they
apply to the transaction. You can neither add nor suppress them.

Editing supports **Reset** on a single field and **Restore all defaults** for
the whole template; both still require **Save** to take effect.

## If I change the configuration, does it change receipts for past transactions?

**Yes — and this is the one thing to internalize before you save.** There is no
per-transaction snapshot of the configuration. The Portal states it in two
places, and the confirmation dialog spells it out: the change takes effect
immediately and affects the receipt display for **all historical and future
transactions**.

Practically: a customer who downloaded a receipt last month and downloads it
again after your change gets a document with the new title, entity details and
logo. If a past receipt must stay exactly as issued, you need to keep your own
copy of it — Waffo does not version it for you.

## Can I have more than one receipt layout?

Yes, as **templates**:

| Rule | Detail |
| - | - |
| Multiple templates | Each appears as its own tab, named `Template 1`, `Template 2`, … |
| Exactly one default | The default is tagged, and it **cannot be deleted** |
| Adding a template | **Add Template** copies the current default in full, then you edit the copy |
| Changing the default | Behind a confirmation. Transactions without a specific template use the default |
| Deleting a template | Behind a confirmation. Transactions that were using it fall back to the **default** template |
| Selecting per order | Pass `paymentInfo.receiptTemplateId` at order create |

Editing the default does **not** propagate to the other templates — they were
copies, not references.

If you have never configured anything, the page opens on a single prefilled
template with receipts not yet enabled.

## Do I need Waffo to review my receipt configuration?

No. It is self-serve and takes effect on save, with no approval step. Two
things do get in the way of a save:

| Rejection | Meaning |
| - | - |
| Version conflict (`008001B126`) | Someone else saved the same configuration while you were editing. Refresh and reapply — the later save is refused rather than silently overwriting |
| Title errors (`008001B129` / `008001B130`) | Title too long, or contains disallowed characters |
| `008001B128` | Attempt to delete the default template |
| `008001B127` | Template no longer exists |

Every change is recorded. The page's **Change history** shows who changed what
and when, per template, newest first, including create / update / set-default /
delete events, and the card above the form shows the last operator and
timestamp.

## Is there anything my configuration cannot change?

Yes, and this is a hard boundary rather than a setting.

Transactions that already produce a receipt under Waffo's own rules — receipts
issued for compliance reasons, and receipts issued because Waffo is the party
of record for the payment — **always** follow those rules. Your configuration
does not apply to them, and you cannot switch those receipts off with the
**Receipt Enabled** toggle. The Portal states this on the configuration page
itself.

Your configuration governs the other direction: transactions that would not
otherwise produce a receipt. That is what enabling a template does.

## Why does a transaction have no receipt at all?

A receipt can only exist when all of the following hold: the payment reached a
**successful** state, it went through a Waffo checkout session, and receipts
apply to that transaction — either by Waffo's own rules or because you enabled
a template. When none of that holds, the transaction detail page hides the
receipt block entirely, and an email request for that order is refused with
`RECEIPT_NOT_ENABLED`.

## What language is the receipt document in?

The receipt page always offers **English**, plus the **order's own language**
when that is not English. That language is determined by the system from the
order, not configured by you and not chosen per download beyond picking from
the offered options. Currently supported receipt languages: English, Português,
Español, 繁體中文, 简体中文, Tiếng Việt, ไทย, Bahasa Indonesia, 日本語, 한국어,
Bahasa Melayu, Polski, Türkçe.

## The quantity on the receipt says 1, but the customer bought three items. Why?

Because the receipt only shows a real quantity when the order explicitly
carries one greater than 1. If the order carries no quantity, carries a value
that cannot be parsed, or carries 1 or less, the receipt shows **1**.

If quantity matters on your receipts, send it on the order — there is no way to
set it afterwards, and no configuration switch for it.

## Can I tell which template produced a given receipt?

Yes. Order and subscription payment information report the applied
configuration as `receiptTemplateId`, and the configuration page shows the
template ID on each tab. That pairing is what to quote when a receipt does not
look the way you expected: it tells you whether the transaction used the
template you think it did, or fell back to the default.

## Can I preview a receipt before saving?

Yes. The configuration page renders a live A4 preview beside the form, driven
by fixed sample transaction data with switches for product type
(one-time / subscription), whether a fee row is present, and card versus other
payment method. The preview is sample data only: it does not mean the
configuration is live, and it never sends an email.

***

Receipt content wrong for one specific transaction rather than all of them?
[Contact support](mailto:support@waffo.com) with the order ID and the template
ID shown on the configuration tab.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.