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
{
"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://..." }POST JSON data, get back a hosted receipt image URL. No complex setup or rendering libraries needed.
Authentic thermal POS receipt look with dot-matrix fonts, paper textures, and professional formatting. Also supports clean modern styles.
Works with any platform: cURL, Python, Node.js, Zapier, Make, n8n, or custom webhooks. Standard REST.
Each generated receipt gets a public URL. Embed in emails, store in databases, attach to expense reports.
Works with your favorite tools
Connect EasyReceiptMaker to your existing workflows. Step-by-step guides for popular automation platforms.
Zapier
5,000+ app automations
Make.com
Visual workflow builder
n8n
Self-hosted automation
Stripe
Payment receipts
Google Sheets
Spreadsheet automation
Airtable
Database triggers
HubSpot
CRM deal receipts
Notion
Database integration
QuickBooks
Accounting sync
Slack
Team notifications
Don't see your tool? Our REST API works with any platform that supports HTTP requests.
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.
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
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
Design or Pick Template
Build your receipt visually or choose from 900+ templates
Copy API Payload
Click "API Payload" to get the exact JSON structure
Automate with API
Use in Zapier, Make, n8n, or code—just swap dynamic data
Simple, transparent pricing
Predictable pricing with clear limits. Need more? Contact us.
- 1,000 receipts/month
- 60 requests per minute
- Public URLs for each receipt
- 30-day receipt storage
- Generator tool included
- Email support
~$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
API Reference
Everything you need to start generating receipts programmatically.
/api/v1/receiptsAuthentication
Include your API key in the Authorization header:
Receipt Options (Root Level)
These fields control the overall receipt appearance. All are optional except sections.
| Field | Type | Default | Description |
|---|---|---|---|
| sections | Section[] | Required | Array of section objects that make up the receipt |
| fontType | string | "MERCHANT_COPY" | "MERCHANT_COPY" (classic thermal), "FAKE_RECEIPT" (dot matrix), or "RECEPTIONAL_RECEIPT" (clean modern) |
| currency | string | "$" | Currency symbol displayed before/after prices (e.g., "$", "€", "£") |
| textColor | string | "#101828" | Hex color code for all text on the receipt |
| numberFormat | string | "LEFT" | "LEFT" = $1.99, "RIGHT" = 1,99€ (European style) |
| backgroundType | string | null | null | null (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:
| Field | Type | Default | Description |
|---|---|---|---|
| type | string | Required | Section type: HEADER, DATE, ITEMS, PAYMENT, CUSTOM, BARCODE, or RESTAURANT |
| alignment | string | "LEFT" | Text alignment: "LEFT", "CENTER", or "RIGHT" |
| bottomDivider | boolean | false | Add a divider line below this section |
| bottomDividerType | string | "DASHES" | Divider style: "DASHES", "EQUALS", "DOTS", "STARS", or "COLONS" |
HEADERStore name, logo, and business details
| Field | Type | Default | Description |
|---|---|---|---|
| businessDetails | string | Required | Store name, address, phone. Use \n for line breaks |
| logo | string | "" | URL to logo image (PNG/JPG). Will be converted to thermal-style |
| size | number | 80 | Logo 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
| Field | Type | Default | Description |
|---|---|---|---|
| date | string | Required | Date/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
| Field | Type | Default | Description |
|---|---|---|---|
| items | ReceiptItem[] | Required | Array of line items (see ReceiptItem below) |
| total | string | Required | Final total amount (e.g., "75.66") |
| totalText | string | "Total" | Label for total line (e.g., "TOTAL", "Grand Total") |
| totalLines | FieldValue[] | [] | Subtotal, tax, discount lines shown before total |
| totalDivider | boolean | false | Add divider line above the total |
| totalDividerType | string | "DASHES" | Divider style (same options as bottomDividerType) |
| totalLarge | boolean | false | Make the total line larger/bolder |
| totalLargePercent | number | 50 | Size 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)
| Field | Type | Default | Description |
|---|---|---|---|
| isCash | boolean | false | true = show cashFields, false = show cardFields |
| cardFields | FieldValue[] | [] | Card payment details (card type, last 4 digits, auth code, etc.) |
| cashFields | FieldValue[] | [] | 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
| Field | Type | Default | Description |
|---|---|---|---|
| custom | string | Required | Any 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
| Field | Type | Default | Description |
|---|---|---|---|
| size | number | 60 | Barcode height in pixels (20-100) |
| length | number | 200 | Barcode 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.)
| Field | Type | Default | Description |
|---|---|---|---|
| leftFields | InfoField[] | Required | Left column fields (e.g., Table, Server) |
| rightFields | InfoField[] | [] | 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 TemplatesStart 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.







