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:
- Download a snapshot as a portable
.msbsnapfile and Import it on another site. - 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:
| Entry | Contents |
|---|---|
manifest.json | Format id (msbsnap) + format version, generator, timestamp, source (host, Joomla version, DB prefix), a snapshot summary, and a payload.sha256 integrity hash. |
snapshot.json | The 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 assnapshot.json.mode(optional) — conflict mode; defaults to the receiving site'ssnapshot_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
| Mode | Behaviour |
|---|---|
| overwrite | Replace matching items by ID — the master wins. |
| create | Skip items whose ID already exists; add only new ones. |
| duplicate | Insert 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:
| Option | Param | Default | Meaning |
|---|---|---|---|
| Default injection mode | snapshot_inject_mode | overwrite | Mode used when an inject call omits mode. |
| Allow Snapshot Injection | snapshot_allow_inject | No | Must 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.