EP Ecommerce — Gelato
EP Ecommerce — Gelato is the Gelato connector for EP Ecommerce — POD, the print-on-demand engine. It is deliberately thin: it holds your Gelato API key and a Test Connection check, and it teaches the engine how to talk to Gelato’s API. Everything else (importing your products, the storefront, checkout, shipping quotes, order routing, and tracking) lives in the engine.
Published by ElmsPark Studio.
What this plugin does
Section titled “What this plugin does”- Stores your Gelato API Key and your preferred currency.
- Provides the Test Connection button, which confirms the key authenticates.
- Connects the POD engine to Gelato so the engine can import your products, quote shipping, route paid orders, and pull back tracking.
On its own it does nothing visible. It is one half of a pair: the engine does the work, this connector supplies the Gelato account.
Requirements
Section titled “Requirements”- PageMotor 0.7 or later
- EP Ecommerce 0.1.22 or later — adds the generic
podproduct type the engine uses. - EP Ecommerce — POD — the engine that does the actual work.
- EP Ecommerce — Stripe — for taking card payment.
- A Gelato account and an API key.
How products work: design them as draft orders
Section titled “How products work: design them as draft orders”Gelato is different from a catalogue-style provider. It does not expose your products over its API, so there is nothing to “browse and import” in the usual sense. Instead, you build each product as a draft order in Gelato, and this connector reads your saved drafts and turns each one into a product on your PageMotor store, with its design, price and preview image.
The flow:
- In the Gelato dashboard, design your product and save it as a draft order. Do not place the order.
- To offer several sizes or colours of one design, add them as separate items in the same draft. Each draft becomes one product, and its items become the size / colour options.
- Set the retail price on the draft. That is the price your customer pays.
- In PageMotor, open EP Ecommerce — POD and click Sync. Your drafts arrive as products.
Your artwork travels with the draft (Gelato keeps it against the design), so the engine has everything it needs to place the real order later. Orders that have actually been placed, and orders your live store creates for customers, are deliberately skipped, so only your hand-built drafts become products.
Installation
Section titled “Installation”Install in this order, activating each before the next:
- EP Ecommerce (0.1.22+).
- EP Ecommerce — POD (the engine).
- EP Ecommerce — Gelato (this connector).
- EP Ecommerce — Stripe (card payment).
Database tables are created automatically on first load.
- Open Plugin Settings → EP Ecommerce — Gelato.
- Paste your Gelato API Key. Create one on the Gelato API keys page (Settings, API keys).
- Set your Currency (for example USD, EUR or GBP). It defaults to USD. Gelato may quote in a different currency, and the engine trusts whatever Gelato returns.
- Click Save, then Test Connection. Gelato has no store id, so nothing is auto-filled; a green result simply confirms the key works.
Then design your products as draft orders (above), open EP Ecommerce — POD, and click Sync.
Troubleshooting
Section titled “Troubleshooting”Test Connection fails
Section titled “Test Connection fails”Check the key is current on your Gelato API keys page. A 401 means the key is invalid or expired. Create a fresh one and try again.
Sync finds no products
Section titled “Sync finds no products”This connector imports your Gelato draft orders, not your order history or a catalogue. In Gelato, make sure you have saved at least one draft order (designed but not placed), then open EP Ecommerce — POD and click Sync. Orders you have already placed, and orders created by your live store for customers, are skipped by design.
A product is missing its design, or shows “not connected”
Section titled “A product is missing its design, or shows “not connected””Each draft needs a finished design attached in Gelato, because the connector carries the design through to the real order. Re-open the draft in Gelato, confirm the design is applied, save it again, then re-Sync.
Feedback and corrections
Section titled “Feedback and corrections”For a quick question about this plugin, EP Support inside your admin is the fastest option. The chat widget sits on every EP plugin settings page and knows which one you’re on.
For anything bigger, like a bug report, a feature request, or a “how do I…” that needs a real reply, open a ticket at help.elmspark.com. A real person, helped by AI, writes the reply, usually within a few hours.
Changelog
Section titled “Changelog”- Fixes stored keys and passwords reading as empty after a PageMotor 0.11.3 or 0.11.4 update. After the core update, every secret this plugin had encrypted at rest came back blank, so anything that needed it failed with an authentication error until the value was typed in again. Nothing was deleted: the encrypted value was still in the settings row, but PageMotor 0.11.3 moved the site secret that opens it, and this plugin was still looking in the old place. It now finds the secret in both places, so an existing value opens again without re-entry, and a value that was re-entered in the meantime keeps working and is moved back under the site secret.
- If you updated PageMotor and then re-entered a key or password, there is nothing to do. If you updated and have not re-entered it, this release restores it on the next page load.
- Your Gelato API key is now stored encrypted. Until this release it sat in plain text in the plugin’s settings, where anyone holding an API or MCP connection to your site with permission to configure plugins could read it straight back out. Your site’s visitors were never able to see it.
- Existing sites convert themselves the next time the plugin loads, once. There is nothing to re-enter and no key to replace.
- Reading your settings over the API now returns a placeholder rather than the value, and writing that placeholder back leaves the stored secret untouched. Clearing it by submitting an empty value still works as before.
- On hosting without encryption support the previous behaviour is kept and the reason is written to the log, because quietly discarding a working key would be worse than the exposure this closes.