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.manageon 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:
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.