Skip to content

Settings

Import/export keeps its settings in OpenCart's own setting table, under the module_preflight group. You set them at Admin > Extensions > Extensions > Modules > Import/export.

Each key below carries where it applies. per store means a multi-store install can hold a different answer per storefront, and both are honoured: a read takes what that store holds, then what the default store holds, then the shipped default. install-wide means one thing serves every storefront, and the key's own description names that one thing.

Scope

Key Default What it does
module_preflight_status
install-wide
0 The key OpenCart's Extensions > Modules list reads to show a module as Enabled. Import/export has no switch for it and reads it nowhere, so the list shows it as Disabled while every screen, schedule and import works. Nothing about it needs turning on.

Sources

Key Default What it does
module_preflight_root
install-wide
empty The one directory a source given as a server path may be read from. Empty means server paths are refused entirely. One directory for the whole installation, because it is one filesystem the server reads.
module_preflight_source_connect
install-wide
10 Seconds to wait for a source server to answer at all, before the fetch is given up on. This is the handshake rather than the download — a supplier whose server is simply not there should fail quickly, and raising this only makes a broken feed take longer to say so.
module_preflight_source_timeout
install-wide
600 Seconds the whole download of a source may take, connection included. Raise it when a supplier generates their feed on demand and takes minutes to hand it over — that is a fact about your supplier that only you know, and until this was settable the answer was that the source was simply unreachable. It buys patience rather than throughput: nothing here makes a slow feed faster.

Exports

Key Default What it does
module_preflight_exports
install-wide
empty Where finished exports are written, as an absolute server path. Empty writes them under Import/export's own working directory, where the admin screen downloads them from. A directory inside the store's image directory is refused, because everything under it is a public URL.
module_preflight_feed_secret
install-wide
empty The secret an external system puts in the feed URL to be handed the most recent finished export. Empty turns the feed off entirely, and a request that does not carry exactly this secret is refused whether or not one is set. Order, customer and coupon exports are never served over the feed, whatever secret is presented: one secret reaches every kind of record the URL names, and those three are not ones to hand out on the strength of a secret shared for a catalog feed. The settings screen never shows it again once saved: leaving the field blank keeps it, typing in it replaces it, and the tickbox beneath removes it.

AI

Key Default What it does
module_preflight_ai_provider
install-wide
empty Which language model provider generated descriptions and meta fields are asked for from: anthropic or openai. Empty means no provider, and a job configured to generate text refuses rather than planning empty fields.
module_preflight_ai_key
install-wide
empty The store's own API key with that provider. It is stored here rather than on a job, so it is never carried in an exported profile. Empty turns generation off as surely as no provider does. Like the feed secret, the settings screen never shows it again once saved: leaving the field blank keeps it, typing in it replaces it, and the tickbox beneath removes it.
module_preflight_ai_connect
install-wide
10 Seconds to wait for your provider to answer at all. The provider and the prompt are your choices rather than ours, so how long either is worth waiting for is yours as well.
module_preflight_ai_timeout
install-wide
120 Seconds one call to your provider may take. A long instruction against a slow model is a real wait, and a job that gave up at the default would report a provider failure that never happened.
module_preflight_ai_tokens
install-wide
600 How many tokens one generated field is reckoned to come back as when a run is priced before you commit to it. It is an estimate rather than a ceiling — what a provider will actually answer with is fixed, and is on the settings reference page under what you cannot change — so raise it when your instructions produce longer copy than this and the quoted figure runs low, and lower it when the quote runs high. Nothing about what is written to your catalog changes either way.

Retention

Key Default What it does
module_preflight_retention
install-wide
30 How many days a job's plan and journal are kept for. A scheduled purge throws away anything older, and a job whose data has gone is marked in the history as no longer reversible. 0 keeps every job's rollback data until it is purged on request.
module_preflight_runs
install-wide
20 How many of a profile's most recent attempts its report shows, newest first. It governs what you see rather than what is kept: how long a run's own rollback data survives is the window above, and the run log is pruned on that. A weekly feed wants more of them on one screen than an hourly one does.

Advanced

Key Default What it does
module_preflight_conserve
install-wide
0 Trades throughput for a quieter server: smaller slices, so a shared host is not held for as long by one request. A named choice rather than a set of numbers, because the numbers behind it are ones nobody has a basis to pick and every support conversation about them starts with what did you set them to.
module_preflight_diary_verbose_until
install-wide
0 When detailed logging stops, as a unix timestamp, and 0 is off. Turning Detailed logging on from this extension's settings form stores the moment two days from now; the writer compares that against the clock every time it is asked for a DEBUG line, so the window closes on its own with no scheduled task and nothing to clean up. While it is open this extension records what it did in far more detail, and the shared diary consequently holds less history.

What you cannot change, and why

These are fixed on purpose. Each one is a decision with a reason beside it rather than a setting nobody got round to adding.

Sources

Import/export resolves a source's host before it connects and refuses every private, loopback, link-local and otherwise reserved address, and it follows each redirect by hand so a public URL cannot redirect its way inside. There is no exemption list and there will not be one: a store owner cannot consent to a server-side request forgery on behalf of the administrator who would be exploited through it, and the address that would be reached first on most hosts is the cloud metadata service. The one exemption the code can hold exists so this guard can be tested against a server on loopback — it names one address rather than turning the guard off, and a redirect away from that address is still refused.

Exports

An export profile may run on a schedule only for the kinds of record the feed serves. Orders, customers and coupons are refused a schedule, and the refusal comes when the profile is saved or scheduled rather than when it runs. An unattended export writes a fresh copy of its records on every cycle with nobody looking at any of them, and for those three that copy is personal data or a list of working discount codes. They stay manual: somebody who has logged in still exports them and downloads the file, exactly as before.

The feed secret and the provider key are kept out of the copy that carries your settings across an update, and there is no setting to change that. The copy lives in a table nothing ever drops, so a credential in it would still be in the database of somebody who removed Import/export altogether. Both keys say on the settings page that they are asked for again, and both features are off until they are — which is the direction a store should fail in.

Advanced

The numbers that decide when a plan is worth warning about belong to a job and have no store-wide default, deliberately. What is alarming depends on the feed: a wholesaler's quarterly price list moves every price by 40% and a daily stock file moves none of them, so a number that was right for one would teach an operator to click past the other. Each job starts at the figures below and each job may be tuned away from them, and zero turns a check off. The counting ones start at one because the first time a feed deletes anything, somebody should have to say so out loud; the two percentages start wide enough that an ordinary feed passes and a decimal-separator mistake does not.

Rule Value
Percent a price may move on one record 30
Records that may lose every category they had 1
Records whose quantity may fall to zero 1
References that may name nothing this store has 1
Image references that may resolve to nothing 1
Percent the source may fall below the last run 20
Records a mirroring job may remove 1

How many pictures a record may bring and where they land belong to a job for the same reason the thresholds do: they are properties of the feed rather than of the store. One supplier publishes absolute URLs on a CDN, the next publishes paths against a Magento install that no longer exists, and the third publishes nothing but SKUs and expects the pictures to be on your server already. A store-wide default could only be right for one of them and would make the other two manual. The figures below are what a new job starts at, and every job may be set away from them on its own screen.

Rule Value
Additional images one record may bring 10
Where installed images go catalog/preflight

AI

How many calls one job may make to your provider is set on the job and has no store-wide default. It is spend control, and the amount at risk is a property of the feed in front of you rather than of the store: a mapping mistake against twenty thousand rows is a bill rather than a plan, and the job you are about to run is the only place you can see how many rows that is. Once the cap is spent the remaining rows are planned with those fields untouched, which the preview and the unchanged count then show.

Rule Value
Calls one job may make when nobody has said otherwise 500

Which kinds of record may be sent to a language model is fixed here and is not a setting. Orders, customers, reviews and coupons are refused outright, and a job configured to generate text for one of them is refused when it is saved rather than planned with those fields quietly left alone. An instruction may name any field the row maps — that is the feature — so a prompt about one of those four resolves to somebody's address, somebody's name, or free prose that names a third party; and the address it would be posted to is fixed in Import/export's own source rather than chosen by you. A destination you chose is yours to disclose and yours to decide; a destination we chose is ours, and personal data does not go there: not by default, not behind a setting, not with a warning, because a store owner cannot consent on behalf of the people in the file. Nothing is lost by the refusal — generation writes a description, a meta title and a meta description, and not one of those four kinds of record has any of them.

What a provider is allowed to answer one call with is fixed in the client for each provider, and it is not the same number as the estimate above. It is a transport bound — large enough that no description this writes is ever cut off by it, small enough that a runaway answer cannot become a bill — and a store lowering it would find generated fields truncated in a way that looks like the model having nothing to say.

Rule Value
Tokens one completion may run to 2048