• Applicable Software: MokonyxBackup
  • Min Version Number: 01.00.01
  • Max Version Number: Not Applicable

Move content between Joomla sites the easy way. Capture articles, categories and modules as a snapshot, then transfer them two ways: download a portable, checksum-verified .msbsnap file to import elsewhere, or inject them directly from a master site into a slave over the Web Services API — with overwrite, create and duplicate conflict modes.

Overview

A content snapshot captures selected Joomla content (articles, categories, modules, and their tags, custom-field values and featured flags) into a JSON payload you can restore later. Snapshot Transfer lets you move a snapshot between sites two ways:

  1. Download a snapshot as a portable .msbsnap file and Import it on another site.
  2. Inject a snapshot directly from a master site into a slave site over the Web Services API.

This is content-level transfer, not a full-site archive.

The Portable .msbsnap Format

A .msbsnap is a ZIP containing:

EntryContents
manifest.jsonFormat id (msbsnap) + format version, generator, timestamp, source (host, Joomla version, DB prefix), a snapshot summary, and a payload.sha256 integrity hash.
snapshot.jsonThe snapshot's content data verbatim: {version, content_types, tables}.

On import the archive is validated before anything happens: both entries must be present, the format must be msbsnap and not a newer version than this site supports, and the payload is verified against payload.sha256 with a constant-time compare — a failed checksum aborts the import. If the source Joomla major version differs, the import still proceeds with a non-blocking compatibility warning. A successful import materialises a local snapshot record; it does not restore anything by itself — you then restore that record from the Snapshots page like any other snapshot.

Download & Import (Snapshots Page)

On the Snapshots page each row offers a Download action (streams a .msbsnap file) and the page has an Import button that accepts an uploaded .msbsnap. The imported snapshot appears as a new record you can restore. A standard search/filter toolbar lets you find snapshots by description and narrow the list by Status (Complete / Failed) and Content Type (Articles / Categories / Modules). (The API also exposes GET .../snapshot/:id/download, which streams the raw snapshot.json payload rather than the zipped .msbsnap.)

Direct Master → Slave Injection (API)

A master site can push a snapshot straight into a slave's Web Services API:

POST /api/index.php/v1/mokonyxbackup/snapshot/inject

Request body:

{
  "snapshot":      { "version": 1, "content_types": ["articles"], "tables": { "...": [] } },
  "mode":          "overwrite",
  "content_types": ["articles"],
  "description":   "Injected from master"
}
  • snapshot (required) — the payload inline, the same shape as snapshot.json.
  • mode (optional) — conflict mode; defaults to the receiving site's snapshot_inject_mode.
  • content_types (optional) — filter to restore only some types.

The endpoint requires the mokonyxbackup.snapshot.manage permission (403 otherwise) and the receiving site must opt in via snapshot_allow_inject (else 403 "Snapshot injection is disabled on this site"). It ingests the payload into a local record (422 if invalid), then restores it in the chosen mode, returning the resulting snapshot_id and any warnings.

Conflict Modes

ModeBehaviour
overwriteReplace matching items by ID — the master wins.
createSkip items whose ID already exists; add only new ones.
duplicateInsert everything as brand-new records with remapped IDs (plus tags, custom-field values and featured flags) via Joomla's Table API, so assets / UCM / nested-set data stays valid.

overwrite and create run inside a DB transaction. duplicate is intentionally best-effort (Joomla's Nested tables issue LOCK TABLES, which implicitly commits the transaction), so each item is inserted defensively — a bad item is skipped and logged, never fatal.

Configuration (Options > Snapshots)

All snapshot settings live on the component's Options > Snapshots tab — transfer/injection and retention together:

OptionParamDefaultMeaning
Default injection modesnapshot_inject_modeoverwriteMode used when an inject call omits mode.
Allow Snapshot Injectionsnapshot_allow_injectNoMust be Yes for this (slave) site to accept inject calls.

Snapshot retention (independent of transfer) is on the same tab: snapshot_retention_count (default 20) and snapshot_retention_days (default 30); 0 = unlimited for that setting.