Skip to Content
EasyPost Refund on Cancel & Manual
Shadail Technology
Odoo Solutions & Digital Transformation
Compatible with
Enterprise
Odoo 19 • Warehouse / Delivery • OPL-1

EasyPost Refund on Cancel & Manual

Automate EasyPost shipment refunds on delivery cancellation, manage manual requests, enforce carrier eligibility rules, retry failed refunds, and maintain a full audit trail — all from within Odoo.

📦 Version 19.0.1.0.0 🏢 Shadail Technology 💻 Odoo 19 🚚 EasyPost 🔒 OPL-1 License ✅ Enterprise Only
📋
Key Features
Everything you need to manage EasyPost shipment refunds without leaving Odoo — automated, configurable, and fully auditable.

The EasyPost Refund on Cancel & Manual module provides a complete refund management solution for EasyPost shipments. It automatically initiates refunds when delivery orders are cancelled, supports manual refund requests through a confirmation wizard, applies carrier-specific eligibility rules, retries failed refunds via a scheduled job, and logs every API interaction for full traceability.

🔄

Auto Refund on Cancel

Automatically submits an EasyPost refund request whenever a validated delivery order is cancelled — zero manual steps required.

🧾

Manual Refund Wizard

The Request EasyPost Refund button on the delivery form opens a confirmation dialog for on-demand refund requests at any time.

Carrier Eligibility Checks

Per-carrier validation: USPS time window (default 30 days), UPS and FedEx toggles — each independently configurable from settings.

🔁

Automatic Retry Cron

A scheduled action retries pending or failed refunds up to a configurable maximum number of attempts at a configurable interval.

🏷️

Return Label Creation

Creates a return EasyPost shipment, selects the lowest available rate, downloads the PDF label, and attaches it to the picking automatically.

📋

Full Audit Logging

Every refund attempt — success or failure — is recorded in a dedicated log with the raw EasyPost API response and timestamps.

💬

Chatter Notifications

Posts refund status updates directly to the delivery order chatter so the whole team stays informed in real time without leaving the record.

⚙️

Centralised Settings

All behaviour controlled from Inventory → Configuration → Settings. No code changes or developer access needed.

⚙️
Configuration Settings

Easypost Refund Configuration Settings screen
Easypost Return and Refund Configuration setting screen.

Go to Sales → Configuration → Settings → Inventory → EasyPost Refund Configuration to manage all options.
SettingDefaultDescription
Auto Refund on CancelEnabledTriggers a refund automatically when a delivery order is cancelled.
Enable Chatter NotificationsEnabledPosts refund status messages to the picking chatter on every attempt.
Maximum Refund Attempts3Number of times the system retries a failed refund before marking it as permanently failed.
Retry Interval (minutes)15Minimum time between automatic retry attempts by the scheduled cron.
Enable USPS RefundsEnabledAllow refunds for USPS shipments via EasyPost.
USPS Refund Window (days)30Maximum number of days after the shipment date to request a USPS refund.
Enable UPS RefundsEnabledAllow refunds for UPS shipments via EasyPost.
Enable FedEx RefundsEnabledAllow refunds for FedEx shipments via EasyPost.
Create Return Label After RefundEnabledAuto-create and attach a return label PDF to the picking when a refund succeeds.
💡
Tip: Start with all toggles enabled and the default retry settings. Tighten carrier-specific rules only after observing refund success rates in production.

Refund Eligibility Flow

Refund requested (auto on cancel OR manual button) | +-- Is easypost_shipment_id set and starts with "shp_"? --> NO --> Skipped (no label) | YES +-- Is carrier USPS? | +-- Enable USPS Refunds = True? --> NO --> Blocked | +-- Within USPS Refund Window? --> NO --> Blocked | YES +-- Is carrier UPS? --> Enable UPS Refunds = True? --> NO --> Blocked +-- Is carrier FedEx? --> Enable FedEx Refunds = True? --> NO --> Blocked | +-- EasyPost Refund API called | +-- Success --> status = refunded, return label created (if enabled) | +-- Failure --> attempt count++, retry later (up to max attempts)
🔧
Setup & Usage

Carrier Setup

Easypost Configuration Settings screen
Easypost Configuration setting screen.

  1. Open the EasyPost carrier

    Go to Inventory → Configuration → Delivery Methods and open your EasyPost carrier record.

  2. Set API keys

    Enter your Test API Key and/or Production API Key. Enable Production Environment for live shipments.

Refund Settings

Easypost Refund Configuration Settings screen
Easypost Return and Refund Configuration setting screen.

  1. Open Inventory Settings

    Go to Sales → Configuration → Settings → Inventory → EasyPost Refund Configuration.

  2. Configure your rules

    Toggle auto-refund, set maximum attempts, retry interval, and carrier-specific rules (USPS window, UPS, FedEx).

  3. Save

    Click Save to persist your configuration.

Using Auto Refund on Cancel

  1. Open a delivery order

    Go to Inventory → Operations → Transfers and open a validated outgoing delivery that has an EasyPost label.

  2. Cancel the picking

    Click Cancel. If the picking has a valid EasyPost Shipment ID (starting with shp_), the refund is submitted automatically.

  3. Check the result

    Open the EasyPost Details tab to see the refund status. The chatter shows a notification if enabled in settings.

Manual Refund Request

Easypost Refund functionality screen
Easypost Return and Refund functionality screen.

  1. Open a shipped delivery

    Navigate to the outgoing delivery order that has an EasyPost label assigned (shipment ID starting with shp_).

  2. Click Request EasyPost Refund

    Use the Request EasyPost Refund button in the header toolbar and confirm the dialog that appears.

  3. Monitor status

    The EasyPost Details tab updates with the refund status, attempt count, and any messages returned by the API.

Enable the Retry Cron

  1. Find the scheduled action

    Go to Settings → Technical → Scheduled Actions and find Retry EasyPost Refunds.

  2. Enable and configure

    Toggle it active and set your preferred interval (default: every 15 minutes). The cron retries all pending pickings up to the configured maximum attempts.

View Refund Logs

  1. Navigate to logs

    Go to Inventory → Reporting → EasyPost → Refund Logs.

  2. Review entries

    Each row shows the delivery, EasyPost shipment ID, refund status, message, and full API response for audit and dispute purposes.

📚
Technical Reference
Module dependencies, data models, and important technical notes.

Module Dependencies

ModulePurpose
stockOdoo Inventory & Stock operations — base for stock picking model
stock_deliveryDelivery carrier integration — carrier field on pickings
delivery_easypostEasyPost API keys, shipment creation, and easypost_shipment_id field
⚠️
Required field: The EasyPost Shipment ID field (easypost_shipment_id) on the delivery order must be populated and start with shp_ for the refund flow to trigger. This is set automatically by the delivery_easypost module when a shipment label is purchased.

Key Models & Fields

ModelField / ExtensionPurpose
stock.pickingeasypost_refund_statusCurrent refund state: pending / submitted / refunded / failed
stock.pickingeasypost_refund_attemptsNumber of refund attempts made so far
stock.pickingeasypost_refund_messageLast message or error returned by the EasyPost API
easypost.refund.logFull modelAudit log: delivery, shipment ID, status, API response, timestamp
easypost.refund.wizardTransient modelConfirmation dialog for manual refund requests
res.config.settingsExtendedAll EasyPost refund configuration toggles and values

Scheduled Action

Retry EasyPost Refunds — finds all pickings with refund status pending or failed where attempt count < max attempts, and re-submits the refund request to EasyPost. Default interval: 15 minutes.

Module Info

PropertyValue
Technical Nameshd_easypost_refund_on_cancel
Version19.0.1.0.0
CategoryWarehouse
LicenseOPL-1
AuthorShadail Technology
Websitehttps://shadailtech.com
Odoo Version19
EditionEnterprise Only

Need Help with Your EasyPost Refund Setup?

Our Odoo logistics and delivery integration team at Shadail Technology is ready to assist with configuration, carrier setup, and customisation.

Contact Us

Download The App From Here


Download App