Receipts in Every Format Your Customers Expect
Receipts

Receipts in Every Format Your Customers Expect

Email, hosted link, thermal print, or fully custom ESC/POS layouts. Receipts are a first-class object in the Surfboard API — line items, taxes, customer details, all attached to the order. Branded automatically, deliverable through any channel, compliance-ready by default.

Five Endpoints. Every Channel. Full Control.

Receipts have always been a checkbox feature on payment platforms. Surfboard ships them as a serious surface — five endpoints, four delivery channels, full ESC/POS for partners who want pixel-identical layouts. Email it, host it, print it default, or print it custom — every transaction, your choice.

Every receipt carries the same canonical fields — line items, tax, customer, merchant, timestamps — regardless of the delivery channel. The same data renders consistently on email, on the hosted page, and on paper.

Branded automatically

Hosted receipts and email receipts inherit from the Branding API. Partner branding by default, merchant or store override where applicable. Customers see your brand on the receipt — never Surfboard's.

How Receipts Work

1

Attach receipt data to the transaction

Send line items, tax breakdowns, customer details, and merchant context. Surfboard composes them into a receipt object tied to the order.
                          POST /orders/:orderId/receipt
{
  "lineItems": [
    { "name": "Cappuccino", "quantity": 1, "amount": 4500 },
    { "name": "Sourdough toast", "quantity": 1, "amount": 7500 }
  ],
  "tax": [{ "type": "VAT", "amount": 1500, "percentage": 12 }],
  "customer": { "email": "guest@example.com" }
}
                      
2

Pick a delivery channel

Email the receipt, fetch a hosted link, print on the terminal, or push raw ESC/POS commands for full layout control. Mix and match — every transaction can use whichever channels make sense.
                          POST /receipts/:receiptId/email
{
  "to": "guest@example.com"
}

GET /receipts/:receiptId/link
// Returns a hosted, brandable receipt URL
                      
3

Custom layouts via ESC/POS

For partners with strong opinions about receipt design, send raw ESC/POS commands base64-encoded. Surfboard pushes them straight to the printer — full control over typography, alignment, logos, dividers, and barcodes.
                          PUT /receipts/:terminalId/escpos
{
  "escposCommands": "G0AbYQEbRQFTdXBl..."
}
                      

What you can build

Receipts touch sustainability, compliance, customer engagement, and operational UX all at once. Here's where the API gets used most.

1. Email Receipts at Scale

Capture an email at the terminal — or pull it from a known customer profile — and send a hosted receipt automatically. No paper, no waste, full transaction breakdown delivered before the customer leaves.

  • Hosted receipt URL with full transaction detail
  • Branded with the partner or merchant theme
  • Re-fetchable at any time — no link expiry pain

Perfect for:

  • Sustainability-focused merchants
  • Loyalty programs that want post-purchase email engagement
  • B2B contexts where the buyer needs digital records

2. Hosted Receipt Links

Every receipt has a URL. Share it via SMS, Messenger, WhatsApp, or QR code on the terminal screen. Customers open the same hosted view that emails reference — single source of truth, no PDFs to manage.

Pair with the Branding API and the receipt page wears your colors, logo, and shape language.

3. ESC/POS Custom Layouts

For partners who care about exactly how the receipt looks on paper, the ESC/POS endpoint accepts raw printer commands. Full control over fonts, alignment, dividers, embedded logos, barcodes, and QR codes — every quirk of every printer model.

Useful for legacy POS migrations, vertical-specific compliance layouts, or partners wanting pixel-identical receipts to their previous stack.

4. Compliance-Ready Tax Breakdowns

Tax lines are first-class fields on the receipt object. Send VAT, surcharges, tips, and any country-specific levy as separate items with rates and amounts. Surfboard renders them clearly on every receipt format — printed, emailed, or hosted.

Designed for the level of itemization Nordic and EU tax authorities expect.

5. Print Locally Without Custom Templates

Default thermal-printer output is built in. Send the print endpoint with the receipt ID and a Surfboard terminal with an integrated printer — SurfPrint, SurfPrint Pro K, SurfPrint Go — handles the rest. No template, no setup, ready out of the box.

6. One Receipt, Multiple Channels

A single receipt can be printed at the terminal and emailed and exposed as a hosted link, simultaneously. Customers pick the format they prefer, and your platform doesn't have to choose for them.

Useful for hospitality flows where one party wants paper and another wants digital — both supported in the same transaction.

Four delivery channels, one receipt

Email

Hosted receipt URL delivered straight to the customer's inbox.

🔗
Hosted Link

Branded receipt page with stable URL — share via SMS, QR, or chat.

🖨
Default Print

Thermal-printer output on Surfboard terminals with integrated printers. No template required.

Custom ESC/POS

Send raw ESC/POS commands for pixel-identical custom layouts.

Built into every printer-equipped Surfboard terminal

SurfPrint, SurfPrint Pro, SurfPrint Pro K, SurfPrint Go — every Surfboard terminal with an integrated printer is ready for receipt operations out of the box. Default templates work immediately; custom ESC/POS layouts deploy through the API without any firmware change.

Migrating from another POS platform with strong receipt opinions? Lift their existing ESC/POS templates over and customers won't notice the change.

Send your first receipt

Five endpoints cover the full surface — attach data to the order, fetch a hosted link, send by email, default-print on a terminal, or push raw ESC/POS commands. Pick the channel that fits the transaction.

                            // Email a receipt to the customer
POST /receipts/:receiptId/email
{
  "to": "guest@example.com"
}

// Or push raw ESC/POS commands to a terminal printer
PUT /receipts/:terminalId/escpos
{
  "escposCommands": "G0AbYQEbRQFTdXBlciBNYXJ0..."
}

// Or fetch a hosted, branded receipt URL
GET /receipts/:receiptId/link