REST API
v1

Receipt Generation API
For Developers

Generate professional receipt images programmatically. Realistic thermal-style POS receipts with authentic fonts, paper textures, and formatting. Send JSON, get a hosted image URL. Perfect for expense automation, accounting integrations, and workflow tools like Zapier, Make, and n8n.

Only need a single receipt? Try our generator tool first

POST /api/v1/receipts
{
  "fontType": "MERCHANT_COPY",
  "currency": "$",
  "sections": [
    {
      "type": "HEADER",
      "businessDetails": "ACME Store\n123 Main St, New York, NY\n(555) 123-4567",
      "alignment": "CENTER"
    },
    {
      "type": "DATE",
      "date": "Dec 5, 2025 2:30 PM"
    },
    {
      "type": "ITEMS",
      "items": [
        { "description": "Widget Pro", "quantity": "2", "total": "49.98" },
        { "description": "Gadget Basic", "quantity": "1", "total": "19.99" }
      ],
      "total": "75.66",
      "totalLines": [
        { "title": "Subtotal", "value": "69.97" },
        { "title": "Tax (8.125%)", "value": "5.69" }
      ]
    },
    {
      "type": "PAYMENT",
      "isCash": false,
      "cardFields": [
        { "title": "Visa", "value": "****4242" }
      ]
    },
    {
      "type": "CUSTOM",
      "custom": "Thank you for shopping!",
      "alignment": "CENTER"
    }
  ]
}

Response

{ "url": "https://..." }
Simple REST API

POST JSON data, get back a hosted receipt image URL. No complex setup or rendering libraries needed.

Realistic Receipt Styles

Authentic thermal POS receipt look with dot-matrix fonts, paper textures, and professional formatting. Also supports clean modern styles.

Universal Compatibility

Works with any platform: cURL, Python, Node.js, Zapier, Make, n8n, or custom webhooks. Standard REST.

Hosted Receipt URLs

Each generated receipt gets a public URL. Embed in emails, store in databases, attach to expense reports.

Integrations

Works with your favorite tools

Connect EasyReceiptMaker to your existing workflows. Step-by-step guides for popular automation platforms.

Don't see your tool? Our REST API works with any platform that supports HTTP requests.

Getting Started

Two Ways to Create Your Payload

Don't write JSON from scratch. Design your receipt visually or start from one of our 900+ templates, then export the exact payload for your API integrations.

Option 1: Build from Scratch

Use our visual receipt builder to design exactly what you need. Add sections, customize styling, upload your logo.

  • • Full control over layout and sections
  • • Real-time preview as you edit
  • • Copy payload when you're done
Open Receipt Builder →
Option 2: Start from Template

Browse 900+ pre-built templates for restaurants, gas stations, retail stores, hotels, and more. Each has a ready-to-use payload.

  • • Professional layouts ready to go
  • • Copy payload directly from template page
  • • Or customize further in the builder
Browse Templates →
How It Works
1

Design or Pick Template

Build your receipt visually or choose from 900+ templates

2

Copy API Payload

Click "API Payload" to get the exact JSON structure

3

Automate with API

Use in Zapier, Make, n8n, or code—just swap dynamic data

Pricing

Simple, transparent pricing

Predictable pricing with clear limits. Need more? Contact us.

API Pro Monthly
$29.99/month
  • 1,000 receipts/month
  • 60 requests per minute
  • Public URLs for each receipt
  • 30-day receipt storage
  • Generator tool included
  • Email support
2 Months Free
API Pro Yearly
$299.90/year

~$25/month

  • 2,000 receipts/month
  • 100 requests per minute
  • 90-day receipt storage
  • Generator tool included
  • Priority support
  • 2× more receipts

Need higher limits or custom pricing? Contact us

Documentation

API Reference

Everything you need to start generating receipts programmatically.

POST
/api/v1/receipts
Generate a single receipt and get a public URL

Authentication

Include your API key in the Authorization header:

Authorization: Bearer erm_sk_your_api_key_here

Receipt Options (Root Level)

These fields control the overall receipt appearance. All are optional except sections.

FieldTypeDefaultDescription
sectionsSection[]RequiredArray of section objects that make up the receipt
fontTypestring"MERCHANT_COPY""MERCHANT_COPY" (classic thermal), "FAKE_RECEIPT" (dot matrix), or "RECEPTIONAL_RECEIPT" (clean modern)
currencystring"$"Currency symbol displayed before/after prices (e.g., "$", "€", "£")
textColorstring"#101828"Hex color code for all text on the receipt
numberFormatstring"LEFT""LEFT" = $1.99, "RIGHT" = 1,99€ (European style)
backgroundTypestring | nullnullnull (plain white), "TEXTURE_1" (light paper), "TEXTURE_2" (aged), "TEXTURE_3" (crumpled)

Common Section Properties

Every section can have these optional properties in addition to its type-specific fields:

FieldTypeDefaultDescription
typestringRequiredSection type: HEADER, DATE, ITEMS, PAYMENT, CUSTOM, BARCODE, or RESTAURANT
alignmentstring"LEFT"Text alignment: "LEFT", "CENTER", or "RIGHT"
bottomDividerbooleanfalseAdd a divider line below this section
bottomDividerTypestring"DASHES"Divider style: "DASHES", "EQUALS", "DOTS", "STARS", or "COLONS"

HEADERStore name, logo, and business details

FieldTypeDefaultDescription
businessDetailsstringRequiredStore name, address, phone. Use \n for line breaks
logostring""URL to logo image (PNG/JPG). Will be converted to thermal-style
sizenumber80Logo width in pixels (20-200)
{
  "type": "HEADER",
  "businessDetails": "ACME STORE\n123 Main Street\nNew York, NY 10001\n(555) 123-4567",
  "logo": "https://example.com/logo.png",
  "size": 80,
  "alignment": "CENTER"
}

DATETransaction date and time

FieldTypeDefaultDescription
datestringRequiredDate/time string. Any format works (displayed as-is)
{
  "type": "DATE",
  "date": "Dec 06, 2025 2:30 PM",
  "alignment": "CENTER"
}

ITEMSLine items with quantities, subtotals, tax, and total

FieldTypeDefaultDescription
itemsReceiptItem[]RequiredArray of line items (see ReceiptItem below)
totalstringRequiredFinal total amount (e.g., "75.66")
totalTextstring"Total"Label for total line (e.g., "TOTAL", "Grand Total")
totalLinesFieldValue[][]Subtotal, tax, discount lines shown before total
totalDividerbooleanfalseAdd divider line above the total
totalDividerTypestring"DASHES"Divider style (same options as bottomDividerType)
totalLargebooleanfalseMake the total line larger/bolder
totalLargePercentnumber50Size increase percentage when totalLarge is true (0-100)

ReceiptItem Object:

{ "quantity": "2", "description": "Widget Pro", "total": "49.98" }

All fields are strings. Quantity can be empty for non-quantity items.

FieldValue Object (for totalLines):

{ "title": "Subtotal", "value": "69.97" }
{
  "type": "ITEMS",
  "items": [
    { "quantity": "2", "description": "Widget Pro", "total": "49.98" },
    { "quantity": "1", "description": "Gadget Basic", "total": "19.99" },
    { "quantity": "", "description": "Gift Wrap", "total": "2.50" }
  ],
  "totalLines": [
    { "title": "Subtotal", "value": "72.47" },
    { "title": "Tax (8.125%)", "value": "5.89" },
    { "title": "Discount", "value": "-2.70" }
  ],
  "total": "75.66",
  "totalText": "TOTAL",
  "totalDivider": true,
  "totalLarge": true
}

PAYMENTPayment method details (card or cash)

FieldTypeDefaultDescription
isCashbooleanfalsetrue = show cashFields, false = show cardFields
cardFieldsFieldValue[][]Card payment details (card type, last 4 digits, auth code, etc.)
cashFieldsFieldValue[][]Cash payment details (amount tendered, change, etc.)

# Card Payment

{
  "type": "PAYMENT",
  "isCash": false,
  "cardFields": [
    { "title": "Card Type", "value": "Visa" },
    { "title": "Card #", "value": "****4242" },
    { "title": "Auth Code", "value": "A12345" },
    { "title": "Entry", "value": "CHIP" }
  ]
}

# Cash Payment

{
  "type": "PAYMENT",
  "isCash": true,
  "cashFields": [
    { "title": "Cash", "value": "100.00" },
    { "title": "Change", "value": "24.34" }
  ]
}

CUSTOMFree-form text block

FieldTypeDefaultDescription
customstringRequiredAny text. Use \n for line breaks. Great for thank you messages, return policies, etc.
{
  "type": "CUSTOM",
  "custom": "Thank you for shopping!\n\nReturns accepted within 30 days\nwith original receipt.",
  "alignment": "CENTER"
}

BARCODEAuto-generated barcode

FieldTypeDefaultDescription
sizenumber60Barcode height in pixels (20-100)
lengthnumber200Barcode width in pixels (100-300)

A random barcode number is auto-generated. The barcode is scannable but contains random data.

{
  "type": "BARCODE",
  "size": 60,
  "length": 200,
  "alignment": "CENTER"
}

RESTAURANTTwo-column info (table, server, guests, order #, etc.)

FieldTypeDefaultDescription
leftFieldsInfoField[]RequiredLeft column fields (e.g., Table, Server)
rightFieldsInfoField[][]Right column fields (e.g., Guests, Order #)

InfoField Object:

{ "title": "Table", "value": "12" }

Same as FieldValue - both have title and value strings.

{
  "type": "RESTAURANT",
  "leftFields": [
    { "title": "Table", "value": "12" },
    { "title": "Server", "value": "Mike" }
  ],
  "rightFields": [
    { "title": "Guests", "value": "4" },
    { "title": "Order #", "value": "1847" }
  ]
}

Response

{
  "success": true,
  "url": "https://www.easyreceiptmaker.com/storage/receipts/abc123.png",
  "expires_at": "2026-01-04T00:00:00Z"
}

cURL Example

curl -X POST https://www.easyreceiptmaker.com/api/v1/receipts \
  -H "Authorization: Bearer erm_sk_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{ "fontType": "MERCHANT_COPY", "currency": "$", "sections": [ { "type": "HEADER", "businessDetails": "ACME Store\n123 Main St, New York, NY\n(555) 123-4567", "alignment": "CENTER" }, { "type": "DATE", "date": "Dec 5, 2025 2:30 PM" }, { "type": "ITEMS", "items": [ { "description": "Widget Pro", "quantity": "2", "total": "49.98" }, { "description": "Gadget Basic", "quantity": "1", "total": "19.99" } ], "total": "75.66", "totalLines": [ { "title": "Subtotal", "value": "69.97" }, { "title": "Tax (8.125%)", "value": "5.69" } ] }, { "type": "PAYMENT", "isCash": false, "cardFields": [ { "title": "Visa", "value": "****4242" } ] }, { "type": "CUSTOM", "custom": "Thank you for shopping!", "alignment": "CENTER" } ]}'

Pro Tip: Copy from Templates

Don't build payloads from scratch! Browse our 900+ templates, click "Copy API Payload" to get a working JSON structure, then customize from there.

Browse Templates
Templates

Start from a template

Use any of our 900+ templates as a starting point. Click "Copy API Payload" to get the JSON structure.

Ready to automate your receipts?

Get your API key and start generating receipts in minutes. No credit card required for the free tier.