Shipping policy

UK delivery information

When will my order arrive?

Every card is printed to order and normally dispatched the following day, excluding Sundays and bank holidays. Choose a delivery option below to see the current estimated arrival dates.

Calculating delivery estimates…

Estimates include our normal dispatch schedule, followed by the Royal Mail delivery window. Dates are estimates rather than guarantees.

🇬🇧

UK delivery only

We currently deliver to addresses within the United Kingdom only. International delivery is not currently available.

🖨️

Printed to order

Each card is printed, checked and packed by us in our home studio. Orders placed Monday to Friday normally dispatch the following day. Orders placed on Saturday or Sunday normally dispatch on Monday.

📮

Royal Mail delivery

Standard First Class and Second Class services are not fully tracked. Tracked 24 and Tracked 48 include delivery updates.

📅

Working-day estimates

Saturday is included as a dispatch day. Sundays and England and Wales bank holidays are excluded from dispatch calculations.

Has your order not arrived?

Royal Mail deliveries can occasionally take longer than expected, and most delayed orders arrive after a few additional working days.

Please contact us if your order has not arrived within:

  • 10 working days after dispatch for Royal Mail Second Class
  • 5 working days after dispatch for Royal Mail First Class

For tracked orders, please check your Royal Mail tracking information first. If there has been no update or the order appears delayed, please get in touch.

Contact us about an order

Delivery questions

Frequently asked questions

Are the estimated delivery dates guaranteed?

No. The dates shown are estimates based on our usual processing time and Royal Mail’s expected delivery windows.

Royal Mail services are not guaranteed to arrive on a particular day. Please order as early as possible when your card is needed for an important date.

When will my order be processed?

Cards are printed to order and normally dispatched the following day.

Orders placed Monday to Friday normally dispatch the next day. Orders placed on Saturday or Sunday normally dispatch on Monday. Bank holidays may move the dispatch date to the next available dispatch day.

Will I receive tracking information?

Royal Mail Tracked 24 and Tracked 48 orders include tracking information.

Standard First Class and Second Class letter services are not fully tracked. Royal Mail may provide a delivery reference, but this is not the same as live door-to-door tracking.

What happens during busy periods?

Delivery can take longer around Christmas, bank holidays, severe weather and periods of Royal Mail disruption.

Please place date-sensitive orders as early as possible and allow additional time during these periods.

What if I entered the wrong delivery address?

Please email us as soon as possible at hello@postcardprints.co.uk.

We can change the address if the order has not yet been dispatched. Once it has been handed to Royal Mail, we cannot redirect it or guarantee that it will be returned to us.

How does Send Direct delivery work?

Choose the Send Direct option, add the message you would like printed inside and enter the recipient’s address at checkout.

We’ll print your message, place the card inside its kraft envelope and post it directly to the recipient.

(function () { const CONFIG = { timeZone: 'Europe/London', locale: 'en-GB', /* England and Wales bank holidays, 2026–2035. Future dates from 2029 onward follow the standard recurring bank-holiday rules. Any exceptional one-off bank holidays announced later must be added manually. */ bankHolidays: [ '2026-01-01', '2026-04-03', '2026-04-06', '2026-05-04', '2026-05-25', '2026-08-31', '2026-12-25', '2026-12-28', '2027-01-01', '2027-03-26', '2027-03-29', '2027-05-03', '2027-05-31', '2027-08-30', '2027-12-27', '2027-12-28', '2028-01-03', '2028-04-14', '2028-04-17', '2028-05-01', '2028-05-29', '2028-08-28', '2028-12-25', '2028-12-26', '2029-01-01', '2029-03-30', '2029-04-02', '2029-05-07', '2029-05-28', '2029-08-27', '2029-12-25', '2029-12-26', '2030-01-01', '2030-04-19', '2030-04-22', '2030-05-06', '2030-05-27', '2030-08-26', '2030-12-25', '2030-12-26', '2031-01-01', '2031-04-11', '2031-04-14', '2031-05-05', '2031-05-26', '2031-08-25', '2031-12-25', '2031-12-26', '2032-01-01', '2032-03-26', '2032-03-29', '2032-05-03', '2032-05-31', '2032-08-30', '2032-12-27', '2032-12-28', '2033-01-03', '2033-04-15', '2033-04-18', '2033-05-02', '2033-05-30', '2033-08-29', '2033-12-26', '2033-12-27', '2034-01-02', '2034-04-07', '2034-04-10', '2034-05-01', '2034-05-29', '2034-08-28', '2034-12-25', '2034-12-26', '2035-01-01', '2035-03-23', '2035-03-26', '2035-05-07', '2035-05-28', '2035-08-27', '2035-12-25', '2035-12-26' ], ukOptions: [ { name: 'Royal Mail 2nd Class', price: 'FREE over £5', minShipBusinessDays: 3, maxShipBusinessDays: 5, note: 'Orders £5.00 and up • 3–5 business days', isFreeOverThreshold: true }, { name: 'Royal Mail 2nd Class', price: '£1.00', minShipBusinessDays: 3, maxShipBusinessDays: 5, note: '3–5 business days' }, { name: 'Royal Mail 1st Class', price: '£1.90', minShipBusinessDays: 2, maxShipBusinessDays: 3, note: '2–3 business days' }, { name: 'Royal Mail Tracked 48', price: '£2.50', minShipBusinessDays: 2, maxShipBusinessDays: 3, note: '2–3 business days' }, { name: 'Royal Mail Tracked 24', price: '£3.60', minShipBusinessDays: 1, maxShipBusinessDays: 2, note: '1–2 business days', isFastest: true } ] }; const pad = (number) => String(number).padStart(2, '0'); function nowInLondon() { const parts = new Intl.DateTimeFormat('en-GB', { timeZone: CONFIG.timeZone, year: 'numeric', month: '2-digit', day: '2-digit', hour: '2-digit', minute: '2-digit', second: '2-digit', hourCycle: 'h23' }).formatToParts(new Date()); const values = {}; parts.forEach((part) => { if (part.type !== 'literal') { values[part.type] = part.value; } }); return new Date( Number(values.year), Number(values.month) - 1, Number(values.day), Number(values.hour), Number(values.minute), Number(values.second) ); } function toISO(dateValue) { return [ dateValue.getFullYear(), pad(dateValue.getMonth() + 1), pad(dateValue.getDate()) ].join('-'); } function isWeekend(dateValue) { return dateValue.getDay() === 0 || dateValue.getDay() === 6; } function isBankHoliday(dateValue) { return CONFIG.bankHolidays.includes(toISO(dateValue)); } function isBusinessDay(dateValue) { return !isWeekend(dateValue) && !isBankHoliday(dateValue); } function isDispatchDay(dateValue) { return dateValue.getDay() !== 0 && !isBankHoliday(dateValue); } function addCalendarDays(dateValue, numberOfDays) { const result = new Date(dateValue); result.setDate(result.getDate() + numberOfDays); return result; } function addBusinessDays(dateValue, numberOfDays) { let result = new Date(dateValue); let added = 0; while (added < numberOfDays) { result = addCalendarDays(result, 1); if (isBusinessDay(result)) { added += 1; } } return result; } function nextDispatchDay(dateValue) { let result = addCalendarDays(dateValue, 1); while (!isDispatchDay(result)) { result = addCalendarDays(result, 1); } return result; } function formatDate(dateValue) { return dateValue.toLocaleDateString(CONFIG.locale, { weekday: 'short', day: 'numeric', month: 'short' }); } function getDispatchDate(now) { return nextDispatchDay(now); } function cardHTML(option, earliest, latest) { const sameDay = toISO(earliest) === toISO(latest); const rangeText = sameDay ? formatDate(earliest) : `${formatDate(earliest)} and ${formatDate(latest)}`; const fastestBadgeHTML = option.isFastest ? '<span class="pp-delivery-badge-fastest">⚡ Fastest</span>' : ''; const freeCalloutHTML = option.isFreeOverThreshold ? '<div class="pp-delivery-free-callout">Free when your order is £5.00 or more</div>' : ''; const classes = [ 'pp-delivery-card', option.isFreeOverThreshold ? 'pp-delivery-card--free' : '', option.isFastest ? 'pp-delivery-card--fastest' : '' ].filter(Boolean).join(' '); return ` <article class="${classes}"> <div class="pp-delivery-card__top"> <strong>${option.name} ${fastestBadgeHTML}</strong> <span>${option.price}</span> </div> ${freeCalloutHTML} <div class="pp-delivery-card__estimate"> <span>${sameDay ? 'Estimated arrival' : 'Estimated arrival between'}</span> <b>${rangeText}</b> </div> <small>${option.note}</small> </article> `; } function renderDeliveryEstimates() { const container = document.getElementById('pp-delivery-estimate'); if (!container || container.dataset.initialised === 'true') { return; } container.dataset.initialised = 'true'; const now = nowInLondon(); const dispatchDate = getDispatchDate(now); let html = ` <div class="pp-delivery-dispatch-note"> <span>Estimated dispatch:</span> <strong>${formatDate(dispatchDate)}</strong> </div> <div class="pp-delivery-list"> `; CONFIG.ukOptions.forEach((option) => { const earliest = addBusinessDays( dispatchDate, option.minShipBusinessDays ); const latest = addBusinessDays( dispatchDate, option.maxShipBusinessDays ); html += cardHTML(option, earliest, latest); }); html += '</div>'; container.innerHTML = html; } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', renderDeliveryEstimates); } else { renderDeliveryEstimates(); } document.addEventListener('shopify:section:load', function () { const container = document.getElementById('pp-delivery-estimate'); if (container) { delete container.dataset.initialised; } renderDeliveryEstimates(); }); })(); .pp-delivery-page { --pp-text: #111111; --pp-muted: #746a62; --pp-green: #26734d; --pp-green-dark: #205e40; --pp-green-light: #f3fbf6; --pp-cream: #fff8f1; --pp-border: #efe4df; --pp-yellow: #fff4cc; --pp-yellow-border: #f1d887; max-width: 1050px; margin: 0 auto; padding: 20px 0 60px; color: var(--pp-text); font-family: inherit; } .pp-delivery-page *, .pp-delivery-page *::before, .pp-delivery-page *::after { box-sizing: border-box; } .pp-delivery-inner { max-width: 820px; margin: 0 auto; } .pp-delivery-hero { padding: 64px 34px; border-radius: 18px; background: var(--pp-cream); text-align: center; } .pp-delivery-eyebrow { margin: 0 0 12px; color: var(--pp-green); font-size: 0.85rem; font-weight: 800; letter-spacing: 0.12em; text-transform: uppercase; } .pp-delivery-page h1 { margin: 0 0 18px; font-size: clamp(2.1rem, 5vw, 3.7rem); line-height: 1.08; } .pp-delivery-page h2 { margin: 0 0 13px; font-size: clamp(1.25rem, 3vw, 1.75rem); line-height: 1.25; } .pp-delivery-page p, .pp-delivery-page li { line-height: 1.7; } .pp-delivery-lead { max-width: 680px; margin: 0 auto; font-size: 1.12rem; } .pp-delivery-estimator-section, .pp-delivery-info-section, .pp-delivery-late-section, .pp-delivery-faq-section { padding: 50px 22px 0; } #pp-delivery-estimate { width: 100%; color: var(--pp-text); font-size: 16px; line-height: 1.4; } .pp-delivery-dispatch-note { display: flex; align-items: center; justify-content: center; gap: 7px; margin-bottom: 16px; padding: 12px 16px; border: 1px solid var(--pp-border); border-radius: 12px; background: #ffffff; text-align: center; } .pp-delivery-dispatch-note strong { color: var(--pp-green-dark); } .pp-delivery-list { display: flex; flex-direction: column; gap: 10px; } .pp-delivery-card { padding: 14px 15px; border: 1px solid var(--pp-border); border-radius: 16px; background: var(--pp-cream); box-shadow: 0 1px 0 rgba(0, 0, 0, 0.02); } .pp-delivery-card--free { border-color: #b8dec7; background: var(--pp-green-light); } .pp-delivery-card--fastest { border-color: var(--pp-yellow-border); background: var(--pp-yellow); } .pp-delivery-card__top { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; margin-bottom: 6px; } .pp-delivery-card__top strong, .pp-delivery-card__top > span { color: var(--pp-text); font-size: 15px; font-weight: 900; line-height: 1.25; } .pp-delivery-card__top > span { flex: 0 0 auto; text-align: right; } .pp-delivery-badge-fastest { display: inline-flex; align-items: center; margin-left: 6px; padding: 4px 8px; border-radius: 999px; background: #ffe9a3; color: #8a5a00; font-size: 11px; font-weight: 900; line-height: 1; vertical-align: middle; white-space: nowrap; } .pp-delivery-free-callout { display: inline-flex; align-items: center; width: fit-content; margin: 0 0 8px; padding: 5px 9px; border-radius: 999px; background: #ddf3e6; color: var(--pp-green); font-size: 12px; font-weight: 900; line-height: 1.2; } .pp-delivery-card__estimate { display: flex; flex-direction: column; gap: 2px; margin-bottom: 4px; font-size: 14px; line-height: 1.35; } .pp-delivery-card__estimate b { font-weight: 900; } .pp-delivery-card small { display: block; color: var(--pp-muted); font-size: 12px; line-height: 1.35; } .pp-delivery-estimator-note { margin: 14px 0 0; color: var(--pp-muted); font-size: 0.9rem; text-align: center; } .pp-delivery-info-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } .pp-delivery-info-card { padding: 24px; border: 1px solid var(--pp-border); border-radius: 16px; background: #ffffff; } .pp-delivery-info-icon { margin-bottom: 12px; font-size: 1.7rem; } .pp-delivery-info-card p { margin: 0; color: var(--pp-muted); } .pp-delivery-late-box { padding: 30px; border: 1px solid #b8dec7; border-radius: 16px; background: var(--pp-green-light); } .pp-delivery-late-box p { margin: 0 0 14px; } .pp-delivery-late-box ul { margin: 0 0 18px 22px; padding: 0; } .pp-delivery-late-box li { margin-bottom: 7px; } .pp-delivery-contact-button { display: inline-block; margin-top: 5px; padding: 13px 22px; border-radius: 8px; background: var(--pp-green-dark); color: #ffffff !important; font-weight: 800; text-decoration: none; transition: opacity 0.2s ease, transform 0.2s ease; } .pp-delivery-contact-button:hover { opacity: 0.92; transform: translateY(-1px); } .pp-delivery-faq-heading { margin-bottom: 20px !important; } .pp-delivery-faq details { margin-bottom: 10px; overflow: hidden; border: 1px solid var(--pp-border); border-radius: 14px; background: #ffffff; } .pp-delivery-faq summary { position: relative; padding: 17px 48px 17px 18px; cursor: pointer; font-weight: 800; line-height: 1.4; list-style: none; } .pp-delivery-faq summary::-webkit-details-marker { display: none; } .pp-delivery-faq summary::after { content: "+"; position: absolute; top: 50%; right: 18px; transform: translateY(-50%); font-size: 22px; font-weight: 400; } .pp-delivery-faq details[open] summary::after { content: "−"; } .pp-delivery-faq details[open] summary { border-bottom: 1px solid var(--pp-border); } .pp-delivery-faq-answer { padding: 17px 18px 19px; } .pp-delivery-faq-answer p { margin: 0 0 11px; } .pp-delivery-faq-answer p:last-child { margin-bottom: 0; } .pp-delivery-page a:not(.pp-delivery-contact-button) { color: var(--pp-green-dark); text-underline-offset: 3px; } @media screen and (max-width: 749px) { .pp-delivery-page { padding-top: 5px; } .pp-delivery-hero { padding: 46px 20px; border-radius: 12px; text-align: left; } .pp-delivery-estimator-section, .pp-delivery-info-section, .pp-delivery-late-section, .pp-delivery-faq-section { padding: 38px 16px 0; } .pp-delivery-info-grid { grid-template-columns: 1fr; gap: 12px; } .pp-delivery-info-card { padding: 20px; border-radius: 14px; } .pp-delivery-late-box { padding: 22px 18px; border-radius: 14px; } .pp-delivery-contact-button { width: 100%; text-align: center; } .pp-delivery-card { padding: 12px; border-radius: 14px; } .pp-delivery-card__top { gap: 8px; } .pp-delivery-card__top strong, .pp-delivery-card__top > span { font-size: 14px; } .pp-delivery-badge-fastest { margin-left: 4px; padding: 4px 7px; font-size: 10px; } .pp-delivery-dispatch-note { align-items: flex-start; flex-direction: column; gap: 2px; text-align: left; } } @media (prefers-reduced-motion: reduce) { .pp-delivery-contact-button { transition: none; } }