Title: Sendit.ma for WooCommerce
Author: yssendit
Published: <strong>18. September 2026</strong>
Last modified: 18. September 2026

---

Plugins suchen

![](https://ps.w.org/sendit-ma-integration/assets/banner-772x250.png?rev=3701652)

![](https://ps.w.org/sendit-ma-integration/assets/icon-256x256.png?rev=3701652)

# Sendit.ma for WooCommerce

 Von [yssendit](https://profiles.wordpress.org/yssendit/)

[Herunterladen](https://downloads.wordpress.org/plugin/sendit-ma-integration.2.2.4.zip)

 * [Details](https://de.wordpress.org/plugins/sendit-ma-integration/#description)
 * [Rezensionen](https://de.wordpress.org/plugins/sendit-ma-integration/#reviews)
 *  [Installation](https://de.wordpress.org/plugins/sendit-ma-integration/#installation)
 * [Entwicklung](https://de.wordpress.org/plugins/sendit-ma-integration/#developers)

 [Support](https://wordpress.org/support/plugin/sendit-ma-integration/)

## Beschreibung

This plugin connects your WooCommerce store to your **Sendit.ma** account, a delivery
service operating in Morocco. It removes double data entry: orders are sent to Sendit
in one click (or automatically), shipping is priced from the customer’s city, and
delivery statuses flow back into WooCommerce.

The plugin interface is in French, the working language of the merchants it serves.

**Main features**

 * **Parcel creation** — send an order to Sendit from the order screen, as a bulk
   action, or automatically when an order reaches a status you choose.
 * **Dynamic shipping rates** — the rate comes from the Sendit district the customer
   selects at checkout. Enable it globally or product by product.
 * **City / district selector** — replaces the „City“ field with a searchable list
   of Sendit districts. Works with both the classic checkout **and** the block checkout(
   WooCommerce 8.9+).
 * **PDF labels** — download the label for one order, or generate a combined PDF
   for a selection of orders.
 * **Automatic status tracking** — the Sendit webhook adds a timestamped note at
   each step and moves the order to „Completed“, „Cancelled“, „Failed“ or „On hold“
   depending on the delivery outcome.
 * **Parcel options** — „allow try on“ and „allow opening“ can be set globally, 
   per order, or in bulk, and are synced to Sendit.
 * **Cities and rates kept current** — the list is fetched when you save your API
   keys and refreshed weekly, so Sendit rate changes reach your store without anyone
   remembering to press a button.
 * **HPOS compatible** — works with WooCommerce High-Performance Order Storage.

#### External service required

This plugin is a connector: it only works with a **Sendit.ma** account. Sendit.ma
is a Moroccan delivery service operated by Sendit (ICE 002745443000051, 120 Bd de
la Grande Ceinture, Casablanca, Morocco). The plugin performs no delivery function
of its own — it sends your orders to the Sendit API and displays what comes back.

**What is sent, when, and where**

 * `https://app.sendit.ma/api/v1/login` — when you save the settings and when you
   test the connection: your API keys, in exchange for a session token.
 * `https://app.sendit.ma/api/v1/districts` — when you save API keys, once a week,
   and whenever you force a sync: no customer data, only a request for the list 
   of cities and rates.
 * `https://app.sendit.ma/api/v1/deliveries` — when a parcel is created, triggered
   by you or by the order status you configured: the customer’s name, phone number
   and address, the order reference, the items and quantities, the amount to collect,
   and the parcel options.
 * `https://app.sendit.ma/api/v1/deliveries/getlabels` — when you download a label:
   the code of the parcel concerned.

Nothing is transmitted until you enter your API keys. The plugin sends data to no
other recipient, loads no external resources, and collects no usage statistics.

**In the other direction**: Sendit calls your store’s webhook URL to report delivery
progress. That URL carries a token, and requests without a valid token are rejected.

By using this plugin you accept the terms of the Sendit service:

 * Terms of use: https://plugins.sendit.ma/terms
 * Privacy policy: https://plugins.sendit.ma/privacy

The plugin is free and no feature is restricted. Physical deliveries carried out
by Sendit.ma are billed separately, at Sendit.ma’s published rates.

## Screenshots

[⌊The settings page: API keys, activation mode, pickup city and webhook URL.⌉⌊The
settings page: API keys, activation mode, pickup city and webhook URL.⌉[

The settings page: API keys, activation mode, pickup city and webhook URL.

[⌊Default parcel options (try on, opening) and the status that triggers automatic
sending.⌉⌊Default parcel options (try on, opening) and the status that triggers 
automatic sending.⌉[

Default parcel options (try on, opening) and the status that triggers automatic 
sending.

[⌊The searchable "Delivery City / District" field at checkout, with the rate calculated
automatically.⌉⌊The searchable "Delivery City / District" field at checkout, with
the rate calculated automatically.⌉[

The searchable „Delivery City / District“ field at checkout, with the rate calculated
automatically.

[⌊The Sendit panel on an order: editable district, parcel code, last known status
and options.⌉⌊The Sendit panel on an order: editable district, parcel code, last
known status and options.⌉[

The Sendit panel on an order: editable district, parcel code, last known status 
and options.

## Installation

 1. In the WordPress admin, go to **Plugins  Add New  Upload Plugin** and upload the
    ZIP file.
 2. Activate the plugin. WooCommerce must be installed and active.
 3. Go to **WooCommerce  Sendit.ma**.
 4. Enter your **Public Key** and **Secret Key** (available in your Sendit.ma account).
 5. Save. The city list is fetched automatically as soon as valid keys are stored, 
    and refreshed once a week from then on.
 6. Choose your pickup city and the activation mode that suits you, then save again.
 7. Copy the **Webhook URL** shown on the page and paste it into the Webhook section
    of your Sendit.ma account, so delivery statuses are reported automatically.

## FAQ

### The Sendit shipping method does not appear at checkout

Check three things: the city list has been synced, the activation mode in the Sendit
settings matches what you need („Per Product“ requires ticking the box on each product),
and a WooCommerce shipping zone covering Morocco contains the „Sendit.ma Shipping“
method.

### The list of cities is empty

Save the settings page with valid API keys: the list is fetched automatically. If
it fails, the notice at the top of the page states the reason (invalid keys, network
blocking, and so on). **Force a city sync** in **WooCommerce  Sendit.ma** retries
immediately.

### Do I have to sync the cities by hand?

No. The list is fetched automatically when you save valid API keys, and refreshed
once a week so rate changes made at Sendit reach your store on their own. The button
is only there to force an immediate refresh.

### Delivery statuses are not updating

The webhook URL must be saved in your Sendit.ma account exactly as shown, **including
its token** (the `token=` parameter at the end). Without that token, requests are
rejected for security reasons.

### Can I change the delivery district after the order is placed?

Yes, from the **Sendit.ma Delivery Options** panel on the order screen, as long 
as the parcel has not been created yet.

### Is the plugin free?

Yes. The plugin is free and no feature is gated. You need an active Sendit.ma account,
and Sendit bills the physical deliveries separately at its published rates.

## Rezensionen

Zu diesem Plugin liegen noch keine Rezensionen vor.

## Mitwirkende und Entwickler

„Sendit.ma for WooCommerce“ ist Open-Source-Software. Folgende Menschen haben an
diesem Plugin mitgewirkt:

Mitwirkende

 *   [ yssendit ](https://profiles.wordpress.org/yssendit/)

[Übersetze „Sendit.ma for WooCommerce“ in deine Sprache.](https://translate.wordpress.org/projects/wp-plugins/sendit-ma-integration)

### Interessiert an der Entwicklung?

[Durchstöbere den Code](https://plugins.trac.wordpress.org/browser/sendit-ma-integration/),
sieh dir das [SVN-Repository](https://plugins.svn.wordpress.org/sendit-ma-integration/)
an oder abonniere das [Entwicklungsprotokoll](https://plugins.trac.wordpress.org/log/sendit-ma-integration/)
per [RSS](https://plugins.trac.wordpress.org/log/sendit-ma-integration/?limit=100&mode=stop_on_copy&format=rss).

## Änderungsprotokoll

#### 2.2.4

 * **Settings sanitisation hardened against non-scalar input.** Every `register_setting()`
   callback now rejects arrays and objects before passing anything to a string function.
   This matters on WordPress 5.8 and 5.9, which the plugin supports: `sanitize_key()`
   only gained its own `is_scalar()` guard in WordPress 6.0, so on those versions
   a crafted nested array in the auto-send status field reached `strtolower()` and
   caused a fatal error when saving the settings. The pickup-district option no 
   longer uses `intval()` directly, which silently turned an array into district
   1.

#### 2.2.3

Addresses the points raised in the WordPress.org plugin review.

 * **Select2 updated from 4.0.13 (2020) to 4.1.0.** The bundled copy was five years
   old. The library version is now a constant used for cache-busting, so an upgraded
   store actually receives the new file instead of serving the old one from browser
   cache. Verified on the block checkout: the city list, its search, selection and
   the resulting rate all behave as before.
 * **Permission check added to bulk label printing.** WordPress validates the bulk-
   action nonce, but not authorisation. The other two bulk actions already checked`
   edit_shop_orders`; printing labels did not, so a user without rights over orders
   could have triggered label generation and obtained the parcel PDF address.
 * **The city-sync notice is now confined to the Sendit settings page.** It could
   previously appear on any admin screen.

#### 2.2.2

 * Plugin URI and Author URI now point to different pages, as the directory requires:
   the plugin page at plugins.sendit.ma/woocommerce, and the company site at www.
   sendit.ma.

#### 2.2.1

Release preparation for the WordPress.org directory, plus automatic city syncing.

 * **Cities now sync on their own.** Saving valid API keys fetches the city and 
   rate list immediately — the separate „sync“ step is no longer something to remember.
   A sync only re-runs when the keys change or the list is empty, so saving the 
   page repeatedly costs nothing. If it fails, the page says why, and the next save
   retries.
 * **Weekly refresh now reaches existing stores.** The weekly city refresh was only
   scheduled when the plugin was activated, so stores that updated in place never
   got it and could keep charging outdated rates. It is now scheduled on load as
   well.
 * The manual button remains as „Force a city sync“, for an immediate refresh.
 * Plugin renamed to „Sendit.ma for WooCommerce“ to follow the WooCommerce trademark
   naming rules.
 * Readme rewritten in English, as the directory requires, and the external service
   Sendit.ma now fully documented.
 * API keys and the shipping strategy option now go through explicit sanitisation
   callbacks.
 * Label download now verifies that the PDF address returned by the API belongs 
   to Sendit before redirecting to it.
 * Translation identifier aligned with the plugin folder (`sendit-ma-integration`),
   which WordPress.org requires before it will distribute translations.
 * Added the translation template `languages/sendit-ma-integration.pot` (146 strings),
   previously missing: no translation could have been produced without it.

#### 2.2.0

Version validated on a real store (WordPress 7.1, WooCommerce 11.1), on both the
classic and block checkouts, with and without High-Performance Order Storage.

Important fixes:

 * **City search restored on the block checkout.** The field listed 500+ cities 
   as a raw list with no search: the library it needs was being removed from the
   page by WooCommerce right after it loaded. It is now bundled with the plugin.
   The field also keeps working after each address recalculation, which was not 
   the case before.
 * **Phone number now required at checkout.** Sendit rejects any parcel without 
   a phone number (HTTP 422). The block checkout left the field optional, so an 
   order could be saved without a number and then fail to send indefinitely. This
   can be turned off.
 * **No more accidental free shipping.** A district missing from the rate list (
   removed at Sendit, stale customer address, unsynced list) offered „Shipping: 
   0 MAD“. No rate is offered in that case now.
 * **Consistent default parcel options.** The settings showed „try on: No“ while„
   Yes“ was being sent to Sendit on a fresh install.
 * **Native city, postcode and state fields hidden** on the block checkout. The 
   state field stayed visible next to the Sendit field, inviting customers to fill
   in the wrong one.
 * **No resources loaded from an external CDN**: the search library ships with the
   plugin.

Performance:

 * The city and rate lists (~22 KB) are no longer loaded on every page view of the
   site, only where they are used.
 * Checkout styles and scripts are now real files, cached by the browser, instead
   of being re-injected into the HTML on every load (~320 lines).

Other:

 * Automatic weekly refresh of cities and rates.
 * Deactivating the plugin no longer deletes the city list; deleting the plugin 
   does erase all data, API keys included.
 * The API test endpoint now checks user capabilities.
 * Fixed an untranslatable label and translations inserted into JavaScript (a single
   apostrophe was enough to break the checkout script).
 * Compatibility headers updated (WordPress 7.1, WooCommerce 11.1).

#### 2.1.1

 * HPOS and block checkout compatibility declarations: WooCommerce no longer shows
   the plugin as incompatible.
 * Fixed: the confirmation message for a manual send was displayed in red, like 
   an error.
 * Fixed: bulk label printing returned no message when none of the selected orders
   had a Sendit code.
 * Fixed: possible PHP notice when saving an order whose city field was absent from
   the checkout.
 * Added the required version headers (WordPress, PHP, WooCommerce) and the plugin
   documentation.

#### 2.1

 * Compatibility with the WooCommerce block checkout (8.9+), with a searchable district
   selector.
 * Automatic sending to Sendit when the order status changes.
 * „Send to Sendit“ bulk action and a direct send button on the order screen.
 * Parcel options (try on / opening) configurable by default, per order, and in 
   bulk.
 * Webhook secured by token, with timestamped order notes at each delivery step.
 * Product and variant details forwarded to Sendit.

## Meta

 *  Version **2.2.4**
 *  Zuletzt aktualisiert **vor 12 Stunden**
 *  Aktive Installationen **weniger als 10**
 *  WordPress-Version ** 5.8 oder höher **
 *  Getestet bis **7.1.1**
 *  PHP-Version ** 7.4 oder höher **
 *  Sprache
 * [English (US)](https://wordpress.org/plugins/sendit-ma-integration/)
 * Schlagwörter
 * [delivery](https://de.wordpress.org/plugins/tags/delivery/)[Morocco](https://de.wordpress.org/plugins/tags/morocco/)
   [sendit](https://de.wordpress.org/plugins/tags/sendit/)[shipping](https://de.wordpress.org/plugins/tags/shipping/)
   [woocommerce](https://de.wordpress.org/plugins/tags/woocommerce/)
 *  [Erweiterte Ansicht](https://de.wordpress.org/plugins/sendit-ma-integration/advanced/)

## Bewertungen

Es wurden noch keine Rezensionen eingereicht.

[Deine Rezension](https://wordpress.org/support/plugin/sendit-ma-integration/reviews/#new-post)

[Alle Rezensionen anzeigen](https://wordpress.org/support/plugin/sendit-ma-integration/reviews/)

## Mitwirkende

 *   [ yssendit ](https://profiles.wordpress.org/yssendit/)

## Support

Möchtest du etwas mitteilen? Brauchst du Unterstützung?

 [Support-Forum anzeigen](https://wordpress.org/support/plugin/sendit-ma-integration/)