VibeFox 99Minutos for PrestaShop — Help
Requirements
PrestaShop: 8.0 to 9.x.
PHP: 8.0 or later. The module refuses to install on older PHP versions.
99minutos API key (for the coverage check only): get it from your 99minutos account manager or at the 99minutos developer portal (developers.99minutos.com). Sandbox and production keys are different. If you only use the price matrix, you do not need an API key.
Countries: 99minutos delivers to Mexico, Colombia, Chile and Peru. The countries you ship to must be active in International > Locations.
VibeFox license key: bought on vibefox.net. One key works on one domain.
Installation
1. In the back office go to Modules > Module Manager and click Upload a module. Choose the module ZIP file.
2. When the upload finishes, click Configure, or find VibeFox 99Minutos in the module list later and click Configure.
3. Paste your VibeFox license key into License key in the license block at the top of the Configure page and click Activate (see License key).
4. Fill in the Price matrix (at least one row, for example "* Default") and, optionally, the API key and the coverage check mode (see Configuration). Click Save.
On install the module creates the 99Minutos carrier with the delivery time text Courier delivery. The carrier is assigned to all zones and all customer groups. You can change zones, customer groups, delivery time, logo and size limits in Shipping > Carriers. The zones of Mexico, Colombia, Chile and Peru must stay enabled for the carrier. Do not set prices there: the price always comes from the module.
Configuration
All settings are on the module page: Modules > Module Manager > VibeFox 99Minutos > Configure. Each section has its own Save button, which saves the whole page. Every save also clears the cached coverage results. After saving, the page warns you if the price matrix is empty, if it has rows for countries 99minutos does not serve, if a coverage check mode is chosen without an API key, or if the shop weight unit is not known to the module (weights are then taken as kilograms). Nothing is saved, and an error is shown, if Method title is longer than 64 characters, if a weight or amount field is not a number of 0 or more, or if Min weight (kg) is greater than Max weight (kg). If the page says The 99Minutos carrier was not found — reset the module to create it again., see Troubleshooting.
General
Enable 99Minutos: turns the carrier on or off. This is the same switch as the carrier status in Shipping > Carriers.
Method title: the carrier name shown to the customer in the cart and at checkout. Default: 99Minutos. Required, up to 64 characters.
Tax: the tax rule of the carrier, or No tax. With a tax rule, PrestaShop adds tax to the shipping price from the matrix.
99minutos API (coverage check) (optional)
The API is used only to check whether 99minutos delivers to the customer's postcode. The price always comes from the matrix.
Coverage check: whether and how the postcode is checked.
With a coverage check, the carrier appears only after the customer enters a postcode. Results are cached: covered for 6 hours, not covered for 30 minutes, API error for 5 minutes. Only the postcode is sent to 99minutos, in upper case with letters and digits only.
API key: your 99minutos API key, sent as a Bearer token to the 99minutos coverage endpoint. Required when the coverage check is on. After saving, the field stays empty and shows Saved — leave empty to keep it. Type a new value only to change it. The key is saved as typed, only spaces around it are removed.
Remove the saved API key: shown only when a key is saved. Turn it on and click Save to delete the key.
Environment: Sandbox (test) (default) or Production. Sandbox and production use different API keys, so choose the environment that matches your key.
Rates
Prices are in your shop default currency, tax excluded, and are used as entered. The final price is shown in the customer's cart currency.
Price matrix: a table of destination countries and prices. Click Add country to add a row and the trash icon to remove one. Each row has a Country (* Default, Mexico, Colombia, Chile or Peru), a Base price and prices for the sizes XS (up to 1 kg), S (up to 2 kg), M (up to 3 kg), L (up to 5 kg) and XL (over 5 kg). An empty or 0 size price falls back to the Base price. The * Default row applies to countries without their own row. If a country has several rows, the first one is used. Both a point and a comma are accepted as the decimal separator; empty, invalid or negative prices are saved as 0. Until the matrix has at least one row, the carrier is not shown at checkout.
Calculation: Per order — size by the total cart weight (default) charges one price for the package size of the whole cart. Per item — each unit priced by its own weight prices every unit by the size of its own weight and adds them up.
Free shipping: turn on free shipping from a cart subtotal.
Free shipping from: the cart subtotal (after discounts, excluding tax) from which the rate is 0. Used only when Free shipping is on.
Restrictions
Min weight (kg): hide the carrier if the cart is lighter. 0 means no limit. It cannot be greater than Max weight (kg). Product weights are converted from your shop weight unit.
Max weight (kg): hide the carrier if the cart is heavier. Default: 25. 0 means no limit; an empty field means 25 kg.
Minimum subtotal: show the carrier only if the cart subtotal (after discounts, excluding tax) is at least this amount. Leave empty to always show it.
Restrict countries: offer the carrier only for the countries below. This is an additional filter on top of the carrier zones. Useful when one zone covers several countries.
Countries: a choice of the 99minutos countries (Mexico, Colombia, Chile, Peru). Hold Ctrl (Cmd) to select several. Used only when Restrict countries is on. Leave empty to allow all 99minutos countries.
Advanced
Debug log: writes rate calculations to logs/vfd_99m_debug.log.php in the module folder. The file cannot be opened from the web. API errors are logged even when this is off. API keys and customer names and addresses are never logged. Turn the log off when you are done.
Log: shows the size and the latest entries of the debug log. Click Clear log to empty it.
Remove data on uninstall: when on, uninstalling the module deletes the settings, the carrier, the coverage cache and the log. When off, everything is kept for a re-install. Orders are kept in any case.
How it works at checkout
At the shipping step PrestaShop asks the module for the 99Minutos price. Only physical products count: virtual products add no weight and are not included in the cart subtotal. The carrier is offered only when the delivery country is Mexico, Colombia, Chile or Peru (and is in the Countries list if Restrict countries is on). The module then checks the weight limits and Minimum subtotal.
If a coverage check mode is on, the module asks the 99minutos API whether the postcode is covered. The request timeout is 10 seconds and the answer is cached, so the same postcode does not trigger a new request. API errors are never shown to the customer: in the Strict mode the carrier is hidden, in the Soft mode the matrix price is used. Free shipping does not bypass the coverage check.
The price is taken from the matrix row of the delivery country, or from the * Default row. If neither exists, the carrier is hidden. If Free shipping is on and the cart subtotal reaches Free shipping from, the rate is 0. The price is calculated in your shop default currency and then shown in the customer's cart currency.
If you edit the carrier in Shipping > Carriers after it has orders, PrestaShop saves it as a new carrier version. The module follows the new version automatically.
The module does not get live rate quotes from 99minutos: prices always come from your matrix. It does not create shipments or orders in 99minutos, print labels (guides), track parcels, offer Punto99 pickup points or handle cash on delivery. Create shipments in your 99minutos account as usual.
License key
The module works with a VibeFox license key from vibefox.net. The license block License — VibeFox 99Minutos is the first block on Modules > Module Manager > VibeFox 99Minutos > Configure, above the settings. Paste the key into License key and click Activate. After that the block shows the key masked, the status (for example the date the license is active until and your domain) and the buttons Check now to check the status again, Change key to enter another key and Remove key to remove the key from this shop. Below them are the line Product: presta-shipping-99minutos and the link Manage licenses and domains in your account, which opens your vibefox.net account. Only employees with the Configure permission for the module can change the key. The texts of the block follow the back office language (English and Russian are included).
If the key is not accepted, the block says why, for example Key not found, This key belongs to another product, Domain limit reached or License expired on a date. After the shop address changes, or after you free a domain slot in your account, click Check now. If the license server cannot be reached, the module keeps working on the last known status.
One key works on one domain: the domain of the main shop, also in a multistore setup. Removing the key from the shop does not free its domain slot. Free the slot in your vibefox.net account.
Without an active key, the 99Minutos carrier is not shown to customers at checkout and no rate is calculated. The PrestaShop storefront does not know that you are logged in to the back office, so the carrier is hidden for you too: you can set up the module before you buy a key, but not test it at checkout. A reminder appears in Modules > Module Manager on the Alerts tab. Existing orders are not affected.
When a license expires, the module keeps working, but updates and support need a renewal. The status is checked again automatically while you work in the back office: once a day for the first 14 days after the key is entered, then once a week. No cron job is needed. Uninstalling or resetting the module always removes the license key and license status.
Troubleshooting
99Minutos does not appear at checkout: check that the license is active and Enable 99Minutos is on. The delivery country must be Mexico, Colombia, Chile or Peru and active in International > Locations. In Shipping > Carriers check that the carrier covers the zone of the customer's country and the customer's group. Check that the Price matrix has a row for that country or a * Default row, and check the weight limits, Minimum subtotal and Restrict countries. Products can also be limited to certain carriers in the product page.
The carrier appears only after a postcode is entered: this is expected with a coverage check. In the Strict mode it appears only when the API confirms coverage.
The carrier is always hidden in the Strict mode: turn on Debug log, reload the checkout and look at the Log field on the module page. An HTTP 401 or 403 error means the API key was rejected: check the key and that Environment matches it (sandbox and production keys differ). Use the Soft mode if customers should still get the matrix price while the API is unavailable.
The price is not what you expected: check Calculation (per order or per item), the product weights and your shop weight unit (International > Localization). An empty or 0 size price falls back to the Base price. With a tax rule in Tax, tax is added to the matrix price.
Coverage results look outdated after a change: click Save on the module page. This clears the cached coverage results.
The page says the 99Minutos carrier was not found: the carrier was deleted in Shipping > Carriers. Reset the module in Modules > Module Manager to create it again. The same applies to the message The settings were saved, but the carrier could not be updated. Reset the module to create it again.
Uninstall
Go to Modules > Module Manager, open the menu next to VibeFox 99Minutos and choose Uninstall. The license key and license status are always removed. The coverage cache is always removed. If Remove data on uninstall is on, the carrier is deleted (orders keep their history) and the settings and log are removed. If it is off, the carrier is only disabled and all settings are kept. Installing the module again gives the saved carrier back the status it had before the uninstall, so Reset does not turn on a disabled carrier.
99minutos is a trademark of its respective owner. This module is not affiliated with or endorsed by 99minutos.
