Skip to content

Powered by Grav CMS + Helios Theme

Shipping

A printed product ships from the printer, not from you, so it is charged at the printer's prices. Each connected provider is a live carrier at checkout, the same way a carrier from the Shipping add-on is, and its methods are priced by the provider while the customer waits.

This page builds on KahunaCart's own live carrier rates. Read Shipping rates for the rate cache, the timeout and the fallback method.

Before you begin

  • Live carrier rates switched on in KahunaCart (shipping.carrier_rates.enabled), and a fallback method nominated. See Shipping rates.
  • kahunacart.pod.manage on whoever adds the provider's methods.

Adding the provider's methods

Press Add shipping methods on the provider's card under Providers, pick the zones you sell printed goods in, and confirm. Or:

BASH
bin/plugin kahunacart-print-on-demand shipping printful            # lists your zones
bin/plugin kahunacart-print-on-demand shipping printful --zones=1,2
bin/plugin kahunacart-print-on-demand shipping gelato --zones=1,2 --services=STANDARD,EXPRESS

The add-on first asks the provider which services it actually offers your products in each zone's first country, by quoting up to three of your linked variants there. Then it adds one method per service it got back, bound to the provider, named the way your customer reads it ("Standard", "Express"). A zone that already has a method for a service is skipped and listed. Existing methods are never edited.

What you get depends on the provider and the country:

Provider Services it can answer with
Printful Standard, and whatever else Printful offers there: a carbon-offset Standard to the US, Express (Printful's PRINTFUL_FAST) to Germany, for example
Printify Standard, Priority, Express and Economy. Express and Economy only when every item can have them
Gelato Economy, Standard and Express
Kahuna Print Co. Standard and Express

Then make sure live carrier rates are on in KahunaCart's shipping settings (shipping.carrier_rates.enabled). Without that, every provider method shows as unavailable.

At checkout

  • The provider is asked once per parcel, in the order's currency, and every method bound to it is priced from that one answer.
  • "Arrives in about N days" counts the printing too: the provider's delivery estimate plus the provider's Production days setting (Printful 3, Printify 5, Gelato 0, because Gelato's estimate already counts it).
  • A method the provider did not offer for this address says so ("This delivery option is not available for this address").
  • A US, Canadian or Australian address with no state is not quoted at all, and the estimate box says "Add your state or province to see this delivery option".
  • When the provider cannot be reached, or answers too slowly, its methods show as unavailable and your fallback method carries the parcel. A provider's rate limit is never waited out at checkout.

A refusal names the item, never the provider. Your customer is never told who prints the shirt.

Printed goods ship at the printer's rates

Printed goods ship at the printer's rates (shipping.provider_rates_only) is on by default. It turns your own shipping methods down for a parcel of printed goods, so a $5 flat rate can never carry a parcel that costs you $9 at Printful. The customer sees only the printer's own options for it.

It turns your methods down only when the provider will actually carry the parcel: live rates are on, a method bound to the provider exists in the zone, and the provider came back with a rate for it. When any of that fails, it stands back and your own methods carry the parcel as before. So Printful being down never leaves a customer with nothing to choose.

Switch it off if you would rather charge your own rates for printed goods and cover the difference yourself.

Mixed carts

A cart with a Printful shirt and a mug you post yourself is two parcels when your products are in different shipping profiles, which an imported or custom product is. Each parcel is charged separately and the two are added up.

KahunaCart tells the add-on which parcel a method was priced for, so your flat rate is turned down for the shirt's parcel and still offered for the mug's.

A single parcel that holds both a printed item and something you ship yourself is left alone, because turning your methods down for it would leave the mug with nothing.

Currencies

The provider's rate has to be in the order's currency already. Nothing is converted.

  • Printful and Gelato quote in whatever currency they are asked for, so they work in every currency your store sells in.
  • Printify does not say what currency its answers are in. Billing currency (printify.currency) says it, and Printify's methods are offered only on orders in that currency. A store selling in EUR and USD gets Printify's rates for one of them and the fallback method for the other.

A rate that comes back in another currency is refused ("This delivery option is not available in this currency").

Duties

When a parcel crosses a border, the method carries "Import duties may be due on delivery." Printful adds it when it says customs fees are possible for the route. Gelato adds it for any cross-border method that does not already include duties (a delivered-duty-paid method shows no line, because Gelato has paid them).

Addresses the printer needs

Some providers need more of an address than KahunaCart asks for. The add-on checks before payment, naming the field, so an order is never paid for and then refused by the printer.

Rule Providers
A state or province for the US, Canada and Australia all
A CPF or CNPJ for Brazil all
No business (CNPJ) orders to Brazil Gelato
An email address Gelato
A phone number outside the United States Printify
Latin letters only (accents are fine) Printify
The address in its own script for China, Japan, Korea and Russia Gelato
Field lengths Printify (35, 30, 61 for the name, 15 for the phone), Gelato (25 each for the first and last name)
A product the provider does not make for that country Gelato

When an order holds items from two providers, the tighter rule wins.

Brazil. KahunaCart's address has no field for a tax number. To sell printed goods to Brazil, add a checkout field keyed tax_number (or tax_id, cpf, cnpj, cpf_cnpj or vat_number), and the add-on reads it from there. Until you do, a Brazilian order with printed goods is refused with a sentence saying what is missing.